1、JVM的内存模型,这里的内存指的是RAM,即随机存储器。分为堆,栈。栈包括虚拟机栈,本地方法栈。堆来存对象。
堆分为年轻代,老年代,年轻代分为1个eden和2个survivor,eden满则触发minor GC,年轻代的GC都叫minor GC,包括从eden到from survivor,和从eden和from survivor 到 to survivor两个阶段。设置2个survivor的目的是防止碎片化。从eden到survivor年龄增大一岁。以上叫做年轻代复制GC算法,整个过程称为minor GC。老年代的算法为标记清除、标记整理两种算法,整个过程称为major GC。
方法区包含了,即时编译器编译的code(常量池)以及静态变量等,JDK1.7之前充当永久区进行GC。
触发full GC的条件有:system.gc();老年代空间担保不足。
2、JVM垃圾回收器
几个维度:老年代&新生代;并行&串行;吞吐量;server/client;响应速度优先。
年轻代的垃圾收集器包括serial,parallel, parallel scavenger
老年代的垃圾收集器包括serial(MSC),CMS,parallel old
3、GC的四种引用:
强引用,软引用,弱引用,虚引用
如何判定对象是否存活——引用计数(JVM不用),可达性评估。可达性指的是对GC root可达。
GC root——栈中引用的对象
finallize在可达性分析之后