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 是什么写法?

    评论

报告相同问题?

悬赏问题

  • ¥15 mmocr的训练错误,结果全为0
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀