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)
Java内存回收的示例代码执行奇怪情况
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
悬赏问题
- ¥30 这是哪个作者做的宝宝起名网站
- ¥60 版本过低apk如何修改可以兼容新的安卓系统
- ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
- ¥50 有数据,怎么建立模型求影响全要素生产率的因素
- ¥50 有数据,怎么用matlab求全要素生产率
- ¥15 TI的insta-spin例程
- ¥15 完成下列问题完成下列问题
- ¥15 C#算法问题, 不知道怎么处理这个数据的转换
- ¥15 YoloV5 第三方库的版本对照问题
- ¥15 请完成下列相关问题!