JVM知识点汇总
1. 如何判断对象存活或死去
(引用计数算法,可达性分析算法)
2. 引用计数(优缺点)
缺点:相互循环引用
3. 可达性分析(GC Roots包含哪些,能过哪种数据结构遍历对象)
可作为GC Roots的对象:
虚拟机栈(栈帧中的本地变量表)中引用的对象。
方法区中类静态属性引用的对象。
方法区中常量引用的对象。
本地方法栈中JNI(即一般说的Native方法)引用的对象
4. 引用的分类(强引用,软引用,弱引用,虚引用)
5. System.gc()和finalize()方法的作用,何时执行
finalize()GC在回收对象之前调用该方法, 不建议用finalize方法完成“非内存资源”的清理工作,但建议用于:① 清理本地对象(通过JNI创建的对象);② 作为确保某些非内存资源(如Socket、文件等)释放的一个补充:在finalize方法中显式调用其他资源释放方法。
6. 方法区何时回收,如何回收
主要回收两部分内容:废弃常量和无用的类
无用的类需要满足3个条件:
(1)该类所有的实例都已经被回收,即Java堆中不存在该类的任何实例;
(2)加载该类的ClassLoader已经被回收;
(3)该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法。
7. 垃圾回收算法(标记清除,复制,标记整理,分代收集)
标记清除:
对可回收对象进行标记,gc时候进行清除
缺点:效率不高,容易产生内存碎片
复制:
把内存一分为二,使用其中一部分,等这一部分使用完,把存活对象复制到另一部分
分为eden和两个survivor,eden:survivor=8:1
缺点:内存利用率不高,当gc时存活对象较多时,效率低,空闲的survivor内存不够时,需要老年代分担
标记整理:
对可回收的对象进行标记,把存活对象往一端移动,然后直接掉端边界以外的内存。
分代收集
把内存分为新生代和老年代
新生代对象生命周期短可以使用复制算法,老年代对象存活率高可使用标记整理算法。
8. Eden空间,Survivor空间的作用,默认比例多少。8:1
9. GC Roots如何枚举(OopMap,
10. GC什么时候触发,解发时如何让所有线程暂停 (设置安全点或者安全区域)
11. Serial收集器
serial收集器:
单线程收集器,暂停所有线程,新生代使用复制算法,老年代使用标记-整理算法。
适用运行在client环境下jvm.
12. Parnew收集器(如何配置收集的线程数量)
parNew收集器:
serial收集器多线程版本。
server模式下新生代收集器。
并行:多条垃圾收集线程并行工作,用户线程暂停
并发:用户线程与垃圾收集线程同时执行
13. 并行和并发的区别
并行是多个垃圾收集线程同时工作还是要stop the world.
并发是垃圾收集器与用户线程同时工作。
14. Parallel Scavenge(如何设置最大垃圾收集停顿时间,和吞吐量大小,作用)
parallel scavenge收集器:(平行清除)
新生代垃圾收集器(复制算法)
-XX:MaxGCPauseMillis(最大停顿时间) -XX:GCTimeRatio (吞吐量大小)
与parNew收集器的最大区别:自适应调节策略
15. Serial Old收集器
Serial Old(PS MarkSweep)收集器:
serial收集器老年代版本, 单线程收集器,暂停所有线程,新生代使用复制算法,老年代使用标记-整理算法。
适用运行在client环境下jvm.在sever模式下使用cms收集器的backup.
16. Parallel Old收集器
Parallel Old垃圾收集器是Parallel Scavenge收集器的老年代版本;
JDK1.6中才开始提供, "-XX:+UseParallelOldGC":指定使用Parallel Old收集器
特点:
针对老年代
采用"标记-整理"算法
多线程收集
17. Cms收集器(初始标记,并发标记,重新标记,并发清除)优缺点.
CMS收集器:
以获得最短回收停顿时间为目标的收集器。使用标记-清除算法
步骤(初始标记,并发标记,重新标记,并发清除)
特点:并发收集,低停顿
优点:
1:并发收集,低停顿
缺点:
会占用部分cpu资源,影响系统总的吞吐量,当cpu核数不足4个时,垃圾收集cpu负载比较大
垃圾收集与用户线程并行处理,容易产生浮动垃圾
使用标记-清除算法,容易产生内存碎片
18. G1收集器
优点:
并行与并发
分代收集
空间整合
可预测的停顿
步骤:初始标记,并发标记,最终标记,筛选回收
垃圾收集器重要参数含义(UseSerialGC,UserParNewGC,UseConcMarkSweepGC)
UseSerialGC:虚拟机运行在Client模式下的默认值,打开此开关后,使用Serial+Serial Old收集器组合进行内存回收
UserParNewGC:使用Parnew+Serial Old收集器组合进行内存回收
UseConcMarkSweepGC:使用Parnew+CMS+Serial Old收集器组合进行内存回收.Serial Old收集器为CMS的backup.