如上图所示:为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的各域分配策略动态变化。新闻热点
疑难解答