Open wangzhenhui1991 opened 7 years ago
垃圾回收需要搞清楚 在什么时候,对什么东西,做了什么事情。
首先需要知道,GC又分为 minor GC 和 Full GC (也称为 Major GC )。 Java 堆内存分为
那么对于 Minor GC 的触发条件:
对于 Full GC(Major GC)的触发条件:也是如果老年代没有足够空间的话,那么就会进行一次 Full GC。
Ps:上面所说的只是一般情况下,实际上,需要考虑一个空间分配担保的问题:
在发生Minor GC之前,虚拟机会先检查老年代最大可用的连续空间是否大于新生代所有对象的总空间。
但是,具体到什么时刻执行,这个是由系统来进行决定,是无法预测的。
主要根据可达性分析算法,
对于可达性分析算法,它是通过一系列称为“GC Roots” 的对象作为起始点,当一个对象到 GC Roots 没有任何引用链相接的时候,那么这个对象就是不可达,就可以被回收。如下图:
这个GC Root 对象可以是一些
主要做了清理对象,整理内存的工作。Java堆分为新生代和老年代,采用了不同的回收方式。
垃圾回收需要搞清楚 在什么时候,对什么东西,做了什么事情。
在什么时候
首先需要知道,GC又分为 minor GC 和 Full GC (也称为 Major GC )。 Java 堆内存分为
那么对于 Minor GC 的触发条件:
对于 Full GC(Major GC)的触发条件:也是如果老年代没有足够空间的话,那么就会进行一次 Full GC。
Ps:上面所说的只是一般情况下,实际上,需要考虑一个空间分配担保的问题:
在发生Minor GC之前,虚拟机会先检查老年代最大可用的连续空间是否大于新生代所有对象的总空间。
但是,具体到什么时刻执行,这个是由系统来进行决定,是无法预测的。
对什么东西
主要根据可达性分析算法,
对于可达性分析算法,它是通过一系列称为“GC Roots” 的对象作为起始点,当一个对象到 GC Roots 没有任何引用链相接的时候,那么这个对象就是不可达,就可以被回收。如下图:
这个GC Root 对象可以是一些
做了什么事情
主要做了清理对象,整理内存的工作。Java堆分为新生代和老年代,采用了不同的回收方式。