GC垃圾回收机制

GC两种类:

  轻GC、重GC(全局GC)

GC的算法:

  • 标记清除法

  

  :不需要额外的空间。

  :两次扫描,严重浪费时间(时间成本),产生内存碎片。

  • 标记压缩

  

 

  是对标记清楚的再次优化。

  :防止内存碎片产生。

  :在标记清楚的基础上再次扫描,移动存活的对象,多了一个移动成本

 

 

  • 复制算法

  在GC过程中,幸存区0和幸存区1谁空谁就是to,另外一个是from。两者都不空通过复制算法,将一个幸存区置空,复制到from区,则该幸存区为to。目的是为了让幸存区from、to分明,并且是动态的。可以用过-XX: MaxTenuringThreshold=?来设置进入养老区的时间。默认情况下,一个对象经过15次GC没有被回收,就进入老年区。

  :没有内存碎片。

  :浪费内存空间,多了一半空的内存(to)。假设对象100%存活(极端情况),全部从from复制到to,成本太高(内存成本)。

  最佳使用场景:对象存活度较低的时候,新生区

 

  • 引用计数法

  

·

 


 

总结:

  1. 内存效率(时间复杂度):复制算法>标志清除算法>标记压缩算法(时间复杂度)
  2. 内存整齐度:复制算法=标记压缩算法>标记清除算法
  3.  内存利用率:标记压缩算法=标记清除算法>复杂算法

 

没有最优算法,只有最合适的算法。

GC:分代收集算法

新生代:

  • 存活率低
  • 复制算法

老年代:

  • 区域大,存活率高
  • 标记清除+标记压缩混合

 

posted @ 2020-04-09 20:22  Q1Zhen  阅读(328)  评论(0编辑  收藏  举报