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   (它是守护线程)

 

posted @ 2020-05-19 13:03  东风~  阅读(136)  评论(0)    收藏  举报