JVM垃圾回收二:分代垃圾回收

导语

不论是引用计数还是可达性分析(gcroot),都是垃圾回收的一种策略,不同的是这两个都不能直接被用于jvm,都有他们的缺点。其实这个更多的是告诉我

为什么要分代

分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率。

如何分代

JVM垃圾回收二:分代垃圾回收进行设置。

什么情况下触发垃圾回收

由于对象进行了分代处理,因此垃圾回收区域、时间也不一样。GC有两种类型:Scavenge GC和Full GC。

· 年老代(Tenured)被写满

· 持久代(Perm)被写满

· System.gc()被显示调用

·上一次GC之后Heap的各域分配策略动态变化

##分代垃圾回收流程示意

JVM垃圾回收二:分代垃圾回收JVM垃圾回收二:分代垃圾回收JVM垃圾回收二:分代垃圾回收JVM垃圾回收二:分代垃圾回收

选择合适的垃圾收集算法

串行收集器JVM垃圾回收二:分代垃圾回收JVM垃圾回收二:分代垃圾回收设置并行垃圾回收的线程数。此值可以设置与机器处理器数量相等。

最大垃圾回收暂停:指定垃圾回收时的最长暂停时间,通过-XX:MaxGCPauseMillis=<N>指定。<N>为毫秒.如果指定了此值的话,堆大小和垃圾回收相关参数会进行调整以达到指定值。设定此值可能会减少应用的吞吐量。

吞吐量:吞吐量为垃圾回收时间与非垃圾回收时间的比值,通过-XX:GCTimeRatio=<N>来设定,公式为1/(1+N)。例如,-XX:GCTimeRatio=19时,表示5%的时间用于垃圾回收。默认情况为99,即1%的时间用于垃圾回收。 

并发收集器JVM垃圾回收二:分代垃圾回收指定还有多少剩余堆时开始执行并发收集

小结

串行处理器: