您的位置:首页 > 其它

JVM垃圾回收算法

2016-03-23 13:39 267 查看
1、标记清除法

标记阶段:标记所有从根节点开始的可达对象

清除阶段

最大问题:空间碎片

2、复制算法

java的新生代串行垃圾回收器:新生代,老年代

3、标记压缩法

4、分代算法

卡表

5、分区算法

二、引用

强引用:可能导致内存泄露

软引用:

弱引用:

虚引用:

三、JVM调优

1、Minor GC,Major GC和Full GC的触发机制区别

深奥:http://www.importnew.com/15820.html

Minor GC 从年轻代空间(包括 Eden 和 Survivor 区域)回收内存

当 JVM 无法为一个新的对象分配空间时会触发 Minor GC,比如当 Eden 区满了。所以分配率越高,越频繁执行 Minor GC。

内存池被填满的时候,其中的内容全部会被复制,指针会从0开始跟踪空闲内存。Eden 和 Survivor 区进行了标记和复制操作,取代了经典的标记、扫描、压缩、清理操作。所以 Eden 和 Survivor 区不存在内存碎片。写指针总是停留在所使用内存池的顶部。

执行 Minor GC 操作时,不会影响到永久代。从永久代到年轻代的引用被当成 GC roots,从年轻代到永久代的引用在标记阶段被直接忽略掉。

质疑常规的认知,所有的 Minor GC 都会触发“全世界[b]的暂停(stop-the-world)”[/b],停止应用程序的线程。对于大部分应用程序,停顿导致的延迟都是可以忽略不计的。其中的真相就 是,大部分 Eden 区中的对象都能被认为是垃圾,永远也不会被复制到 Survivor 区或者老年代空间。如果正好相反,Eden 区大部分新生对象不符合 GC 条件,Minor GC 执行时暂停的时间将会长很多。

所以 Minor GC 的情况就相当清楚了——每次 Minor GC 会清理年轻代的内存

Major GC 是清理永久代。

Full GC 是清理整个堆空间—包括年轻代和永久代。

JVM调优的基本思路是什么?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: