GC回收机制理解
垃圾回收(garbage collection)
1、标记-清除算法 Mark-Sweep
递归每一个能访问的对象的指针数组,将活动的对象进行标记;将不能活动的对象进行回收;优点速度快;缺点产生碎片,效率低;
2、标记-整理算法
标记清除的升级版;将标记的对象移入一侧,然后清除边界外的内存;优点没有碎片;缺点效率低;
3、标记-复制算法
将堆空间分成大小相同的两份,执行GC时候,将一个空间的活动对象复制到另一个空间,然后回收前一个空间;优点不用考虑碎片,运行块,缺点效率低空间缩小一半;
4、引用计数算法
引入计数器,用增减计数器的值来进行内存管理。在分配内存空间时,将对象的计数器+1。在更新指针的过程中,增加新应用对象的ref_cnt,减少指针原先对象的ref_cnt计数。如果ref_cnt为0,则为垃圾,将被立即回收。优点可以立刻回收垃圾;缺点计数器占位多,实现复杂;
JVM内存划分
新生代
老年代
永久代

新生代:
在伊甸园创建对象
伊甸园存满,标记-复制到存活区A,伊甸园清空
反复多次后,存活区A存满,A标记-复制到B,并清空A
伊甸园标记复制到B,反复多次,B满了,向A复制
A,B来回复制几次后(默认15次),仍然存活的对象,进入老年代
老年代:
老年代空间较大,对象多
老年代回收算法一般采用“标记-清除” 或 “标记-整理”
老年代垃圾回收,会引起STW - Stop The World(是在执行垃圾收集算法时,java应用程序的其他所有线程都被挂起(除了垃圾收集帮助器之外))
System.gc() 会引起 Full GC (它是守护线程)

浙公网安备 33010602011771号