Java技术点速记 | 垃圾收集与内存分配

简述一下JAVA中JVM使用的常见垃圾收集方法和技术。

垃圾标记方法

  1. 引用计数
  2. 可达性分析

垃圾收集方法

  1. 标记-清除
    标记对象后统一回收,存在回收效率和内存碎片的问题。
  2. 标记-复制
    将存活对象统一移动到另一部分内存空间里去,问题是内存可用率降低。
  3. 标记-整理
    移动存活对象向空间的某一端然后释放边界外空间,问题是计算负担较大。

垃圾收集器

  1. Serial :早期新生代垃圾收集器,简单高效内存消耗小但是存在停顿时间长的问题。
  2. ParNew :Serial收集器的多线程版本
  3. Parallel Scavenge : 基于标记-清除的多线程新生代收集器。相比于ParNew增加了吞吐量控制(即保证垃圾收集时间与用户代码执行时间等于某个比例)。
  4. Parallel Old :Parallel Scavenge的老年代版本,基于标记-整理。
  5. CMS :通过初始标记、并发标记、重新标记、并发清除四个步骤降低停顿时间,其中并发标记和并发清除不需要停顿用户线程,重新标记是用来修正并发标记期间多线程导致的标记对象变动。
  6. G1(Garabge First) : 将java堆划分成多个大小相等的Region,通过优先级列表以实现最高效回收。相比CMS,G1更接近“标记-整理”算法。
  7. Shenandoah :支持并发标记、并发回收、并发引用更新,具有比G1更好的性能。
  8. ZGC :使用染色体指针(Colored Pointer)极大降低了停顿时间,但也因此导致ZGC管理的内存不能超过4TB,但由于其出色的性能使得ZGC是未来的首选收集器之一。

我的微信链接 ,欢迎关注交流 JVM技术点速记 | 垃圾收集与内存分配

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章