网站建设捌金手指花总二八,网络媒体设计与制作,国外专业做汽配的网站,厦门seo外包服务一、JVM是什么 JVM是JavaVirtualMachine#xff08;Java虚拟机#xff09;的缩写#xff0c;JVM是一种用于计算设备的规范#xff0c;它是一个虚构出来的计算机#xff0c;是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
JVM的重要性 JVM这块是一个偏向于概念模…一、JVM是什么 JVM是JavaVirtualMachineJava虚拟机的缩写JVM是一种用于计算设备的规范它是一个虚构出来的计算机是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
JVM的重要性 JVM这块是一个偏向于概念模块但是在好多大企业都是会比较看中的一块只有了解了JVM在开发过程中才能更好的发挥项目的性能提升项目质量。以下是我整理了一些有关JVM的资料供大家参考。
二、JVM常见问题
1.JVM的主要组成部分
1.class loader 类加载器加载类文件到内存。Class loader只管加载
2.exection engine 执行引擎也叫解释器负责解释命令交由操作系统执行
3.native interface本地接口。本地接口的作用是融合不同的语言为java所用
4.Runtimedata area 运行数据区运行数据区是jvm的重点我们所有所写的程序都被加载到这里之后才开始运行
5.stack栈栈也叫栈内存是java程序的运行区是在线程创建时创建它的生命周期跟随线程的生命周期线程结束栈内存释放
6.堆内存一个JVM实例只存在一个堆内存堆内存的大小是可以调节的。类的加载器读取了类文件之后需要把类、方法、常变量放到堆内存中以方便执行器执行堆内存分三部分
7.方法区方法去是被所有线程共享
8.程序计数器:每个线程都有一个程序计数器就是一个指针指向方法区中的方法字节码由执行引擎读取下一条指令
2、JVM运行时数据区
Java 虚拟机规范规定的区域分为以下 5 个部分
1.程序计数器当前线程所执行的字节码的行号指示器字节码解析器的工作是通过改变这个计数器的值来选取下一条需要执行的字节码指令
2.虚拟栈用于存储局部变量表、操作数栈、动态链接、方法出口等信息Java方法
3.本地栈而本地方法栈是为虚拟机调用 Native 方法服务的 4.堆Java 虚拟机中内存最大的一块是被所有线程共享的几乎所有的对象实例都在这里分配内存
5.方法区用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据
3.类装载(classload)的执行过程
类装载分为以下 5 个步骤
1.加载根据查找路径找到相应的 class 文件然后导入
2.检查检查加载的 class 文件的正确性
3.准备给类中的静态变量分配内存空间
4.解析虚拟机将常量池中的符号引用替换成直接引用的过程。符号引用就理解为一个标示而在直接引用直接指向内存中的地址
5.初始化对静态变量和静态代码块执行初始化工作。
4.判断对象是否可以被回收
1.引用计数器为每个对象创建一个引用计数有对象引用时计数器 1引用被释放时计数 -1
2.可达性分析从 GC Roots 开始向下搜索搜索所走过的路径称为引用链
5.Java中都有哪些引用类型
1.强引用发生 gc 的时候不会被回收。
2.软引用有用但不是必须的对象在发生内存溢出之前会被回收。
3.弱引用有用但不是必须的对象在下一次GC时会被回收。
4.虚引用幽灵引用/幻影引用虚引用的用途是在 gc 时返回一个通知
6、简述分代垃圾回收器是怎么工作
分代回收器有两个分区老生代和新生代新生代默认的空间占比总空间的 1/3老生代的默认占比是 2/3。
7.JVM调优的工具
JDK 自带了很多监控工具都位于 JDK 的 bin 目录下其中最常用的是 jconsole 和 jvisualvm 这两款视图监控工具。
8.常用的JVM调优的参数都有哪些
XX比X的稳定性更差并且版本更新不会进行通知和说明。
-Xms s为strating表示堆内存起始大小
-Xmx x为max表示最大的堆内存
一般来说-Xms和-Xmx的设置为相同大小因为当heap自动扩容时会发生内存抖动影响程序的稳定性
-Xmnn为new表示新生代大小
-Xss规定了每个线程虚拟机栈堆栈的大小
-XX:SurvivorRator8表示堆内存中新生代、老年代和永久代的比为8:1:1
-XX:PretenureSizeThreshold3145728创建大小表示当创建new的对象大于3M的时候直接进入老年代
-XX:MaxTenuringThreshold15表示当对象的存活的年龄minor gc一次加1大于多少时进入老年代
-XX:-DisableExplicirGC表示是否表示是-表示否打开GC日志
9.获取Java程序使用的内存堆使用的百分比
可以通过 java.lang.Runtime 类中与内存相关方法来获取剩余的内存总内存及 最大堆内存。
10.JRE、JDK、JVM 及JIT之间有什么不同
JRE 代表 Java 运行时Java run-time是运行 Java 引用所必须的。
JDK代表 Java 开发工具Java development kit是 Java 程序的开发工具
JVM 代表 Java 虚拟机Java virtual machine它 的责任是运行 Java 应用。
11.说一下JVM有哪些垃圾回收算法
标记-清除算法标记无用对象然后进行清除回收。缺点效率不高无法清除垃圾碎片。
标记-整理算法标记无用对象让所有存活的对象都向一端移动然后直接清除掉端边界以外的内存。
复制算法按照容量划分二个大小相等的内存区域当一块用完的时候将活着的对象复制到另一块上然后再把已使用的内存空间一次清理掉。缺点内存使用率不高只有原来的一半。
分代算法根据对象存活周期的不同将内存划分为几块一般是新生代和老年代新生代基本采用复制算法老年代采用标记整理算法。
12.什么是双亲委派模型
如果一个类加载器收到了类加载的请求它首先不会自己去加载这个类而是把这个请求委派给父类加载器去完成每一层的类加载器都是如此这样所有的加载请求都会被传送到顶层的启动类加载器中只有当父加载无法完成加载请求它的搜索范围中没找到所需的类时子加载器才会尝试去加载类
13.JVM生命周期
在如下几种情况下Java虚拟机将结束生命周期
1、执行了System.exit()方法
2、程序正常执行结束
3、程序在执行过程中遇到了异常或错误而终止进程
4、由于操作系统出现错误而导致Java虚拟机进程终止