JVM发生fullGC的时候新生代没有指引的数据为什么没有显示被回收?

lengxingxing_ 2017-01-08 11:58:30
以下分配堆内存20M,新生代10M,主要看allocation7=new byte[2*_1MB]引发的第二次GC
/**
*VM Args:-Xms20M -Xmx20M -Xmn10M -XX:+UseSerialGC -XX:+PrintGCDetails -XX:SurvivorRatio=8 -XX:-HandlePromotionFailure
*/
public class Test
{
private static final int _1MB=1024*1024;
@SuppressWarnings("unused")
public static void testHandlePromotion(){
byte[] allocation1,allocation2,allocation3,allocation4,allocation5,allocation6,allocation7;
allocation1=new byte[2*_1MB];
allocation2=new byte[2*_1MB];
allocation3=new byte[2*_1MB];
allocation1=null;
allocation4=new byte[2*_1MB];
allocation5=new byte[2*_1MB];
allocation6=new byte[2*_1MB];
allocation4=null;
allocation5=null;
allocation6=null;
allocation7=new byte[2*_1MB];
}
public static void main(String[] args){
Test.testHandlePromotion();
}
}

t
[GC [DefNew: 6487K->184K(9216K), 0.0039004 secs] 6487K->4280K(19456K), 0.0041737
secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
[GC [DefNew: 6414K->6414K(9216K), 0.0000979 secs][Tenured: 4096K->4280K(10240K),
0.0046612 secs] 10510K->4280K(19456K), [Perm : 3081K->3081K(21248K)], 0.0053120
secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
这里第二次GC是fullGC吧?为什么新生代DefNew是6414->6414没有被回收,对象4,5,6不是应该被回收么?最后的堆内存日志也显示新生代变成了0,但GC日志却没有显示6414->0,为什么会这样?是怎样的过程?
...全文
155 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧