码迷,mamicode.com
首页 > 编程语言 > 详细

四种GC算法

时间:2020-01-10 15:52:00      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:静态属性   优点   开始   内存碎片   静态   分析   需要   碎片   收集   

四种GC算法

GC垃圾回收,首先需要判断哪些对象需要回收

判断对象存活

可达性分析

? 从GC Roots开始向下查询,如果一个对象到任何一个GC Root对象都没有一个引用链相连的话,说明此对象不可用。

? 四个GC Root对象

  1. JVM栈中引用的对象
  2. 方法区静态属性引用的对象
  3. 方法区中常量引用的对象
  4. 本地栈中JNI中引用的对象

四种GC算法

引用计数

? 每个对象都有一个引用计数属性,多一个引用+1,少一个引用-1,为0的时候代表可以回收。

? 致命缺点:无法解决循环引用

复制算法

? 将内存分为两块,当一块内存用完了,就将存活的对象复制到另一块内存中。

? 优点:空间连续,没有内存碎片,运行效率高。

? 缺点:占用内存,如果复制长期生存的对象,会导致效率低。

? 主要用在新生代,因为新生代对象存活率低。

标记-清除

? 先标记出需要清除的对象,再将标记的对象回收。

? 优点:占用内存小

? 缺点:

? (1)需要进行两次动作,标记和清除,所以效率低。

? (2)回收完之后,内存不连续,会有内存碎片

标记-压缩

? 先标记出需要清除的对象,但是不进行回收,而是让所有存活对象都向一段移动,然后清除边界之外的内存空间。

? 优点:占用内存小,没有内存碎片

? 缺点:效率低

分代收集

? 根据Java堆的新生代和老年代的特点,选用不同的回收算法。新生代内存空间大,对象会大量死去,回收频繁,使用效率高的复制算法,只需要每次复制少量存活下来的对象即可。老年代内存空间小,对象存活率高,使用标记-清除/标记-压缩算法。

四种GC算法

标签:静态属性   优点   开始   内存碎片   静态   分析   需要   碎片   收集   

原文地址:https://www.cnblogs.com/jjpp/p/12176243.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!