MinorGC 和 FullGC的理解
作者:
南园故剑00 | 来源:发表于
2020-08-21 21:51 被阅读0次
1. GC的基本原理
- 用new关键字即在内存中分配了内存,我们称为可达。对于GC来说,只要所有被引用的对象null时,我们称为不可达。就进行内存的回收。
- 当一个对象被创建时,GC开始监控这个对象的大小,内存地址及使用情况。GC采用有向图的方式记录和管理堆中的所有对象,通过这种范式可以明确哪些对象是可达的,哪些不是。当确定为不可达时,则对其进行回收。
- 保证GC在不同平台的实现。对于采用什么算法,什么时候进行回收。
2. java GC机制:
- minor GC:
从年轻代(Eden+Survivor)空间回收内存被称为Minor GC。
当JVM无法为一个新的对象分配空间时会触发Minor GC,比如Eden满了。所以分配率越高,越频繁执行GC。内存被填满时其中的内容会被复制,指针从0开始跟踪空闲内存。eden和Survivor区进行了标记和复制操作,取代了经典的标记、扫描、压缩、清理操作。所以eden和survivor区不存在的内存碎片。写指针总是停留在所使用内存池的顶部。执行minor GC操作时,不会影响到永久代。从永久代到年轻代的引用被当成GC Roots,从年轻代到永久代的引用在标记阶段被直接忽略掉。
- major GC / Full GC
- Major是清理永久代。Full Gc是清理整个堆空间-包括年轻代和永久代。
- 许多Major GC是由Minor GC触发的,很多情况下将这两种GC分离是不太可能的。
- 这使得我们不用关心到底是major GC还是Full GC,大家应该关注当前的GC是否停止了所有应用程序的线程,还是能够并发处理而不用停掉应用程序的线程。
3. GC机制的基本算法:分代收集
- 年轻代:使用停止-复制算法进行清理
- 老年代:标记-整理算法:标记处仍然存活的对象,将所有存活的对象向一端移动,以保内存的连续。
https://www.cnblogs.com/leeego-123/p/11298267.html
本文标题:MinorGC 和 FullGC的理解
本文链接:https://www.haomeiwen.com/subject/ibppjktx.html
网友评论