Java内存回收的示例代码执行奇怪情况

public class MainTest{
private static final int _2MB=1024*1024*2;
/**
VM参数:-verbose:gc-Xms20M-Xmx20M-Xmn10M-XX:+PrintGCDetails
-XX:SurvivorRatio=8
*/
public static void testAllocation(){
byte[]allocation1,allocation2,allocation3,allocation4;
allocation1=new byte[2
_2MB];
allocation2=new byte[2*_2MB];
allocation1 = null;
allocation2 = null;
allocation3=new byte[2*_2MB];//理论上应该出现一次Minor GC,但感觉上没有。
allocation4=new byte[4*_2MB];
}
public static void main(String[] args) {
testAllocation();
}
}
如上代码是根据《深入理解Java虚拟机》一书而来,理论上当代码执行allocation3那一行赋值代码时,由于youngGen已经满员,所以会触发一次Minor GC,然后将allocation1和2都回收掉,但是结果还是爆出OOM异常了。如果在allocation2那一行后面加上System.gc()的话,代码正常执行。求解答(环境JDK7,windows10)

1个回答

allocation4=new byte[4*_2MB];

4*_2MB 是什么写法?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!