当前位置: 移动互联网学院 > Java培训 > JAVA开发 > JVM垃圾回收算法详解
JVM垃圾回收算法详解 时间:2017-05-10     来源:华清远见JAVA学院

我们开发Java程序都需要在JVM上运行和调试,但是你知道JVM的垃圾回收算法吗?今天华清Java学院小编就来和大家分享一下JVM垃圾回收算法的相关知识。

JVM垃圾回收算法

JVM垃圾回收算法可以分为三类,都基于标记-清除(复制)算法:Serial算法(单线程)、并行算法、并发算法。

JVM会根据机器的硬件配置对每个内存代选择适合的回收算法,比如,如果机器多于1个核,会对年轻代选择并行算法,关于选择细节请参考JVM调优文档。

稍微解释下的是,并行算法是用多线程进行垃圾回收,回收期间会暂停程序的执行,而并发算法,也是多线程回收,但期间不停止应用执行。所以,并发算法适用于交互性高的一些程序。经过观察,并发算法会减少年轻代的大小,其实就是使用了一个大的年老代,这反过来跟并行算法相比吞吐量相对较低。

还有一个问题是,垃圾回收动作何时执行?

1>当年轻代内存满时,会引发一次普通GC,该GC仅回收年轻代。需要强调的时,年轻代满是指Eden代满,Survivor满不会引发GC

2>当年老代满时会引发Full GC,Full GC将会同时回收年轻代、年老代

3>当永久代满时也会引发Full GC,会导致Class、Method元信息的卸载

另一个问题是,何时会抛出OutOfMemoryException,并不是内存被耗空的时候才抛出

1>JVM98%的时间都花费在内存回收

2>每次回收的内存小于2%

满足这两个条件将触发OutOfMemoryException,这将会留给系统一个微小的间隙以做一些Down之前的操作,比如手动打印Heap Dump。

X