各种算法-分代(generational collecting)

原理:基于对象生命周期分析得出的垃圾回收算法。把对象分为年轻代、年老代、持久代,对不同的生命周期使用不同的算法(2-3方法中的一个即4自适应)进行回收。


如上图所示:为Java的各代分布图
年轻代(young)
    分为3个区。一个Eden区,2个survivor区。大部分对象在Eden中生成。当Eden区满时,还存活的对象将被复制到survivor区。当该survivor区满时,此区的存活对象被复制到另外一个survivor区,当第2个survivor区也满时,该区还存活的对象将被复制到年老区(tenured)。

年老代(tenured)
   存放从年轻代(young)复制过来的对象。

持久代(perm)
    用于存放静态文件,如Java类、方法等。持久代对垃圾回收没有显著的影响,但是有些应用可能动态生成或者调用一些class。 持久代大小通过
-XX:MaxPermSize=N进行设置

Thinking in java给java gc取了一个罗嗦的称呼:“自适应、分代的、停止-复制、标记-扫描”式的垃圾回收器。

导致Gc的情况:
1、tenured被写满
2、perm被写满
3、System.gc()的显式调用。

4、上一次GC之后heap的各域分配策略动态变化。


http://www.blogjava.net/showsun/archive/2011/07/21/354745.html

你可能感兴趣的:(算法)