CONNOR_AK 2017-07-04 05:59 采纳率: 0%
浏览 723

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条回答 默认 最新

  • cangfengluyu 2017-07-04 12:09
    关注

    allocation4=new byte[4*_2MB];

    4*_2MB 是什么写法?

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!