相同的测试代码,为什么jdk1.7没有内存溢出。而1.6内存溢出了。
相同的测试代码,为什么jdk1.7没有内存溢出。而1.6内存溢出了。
public static void main(String[] args) { ArrayList<Object> list = new ArrayList<Object>(); while(true){ list.add(new Temp("admin", "password")); } }
-Xms10M -Xmx10M
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
这个测试的意义是什么
其实每个版本的虚拟机都是不同的, 1.7相比于1.6来说CG肯定是有所优化得了
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at Flow.main(Flow.java:8)
java1.8
我的意思是同样设置了10m的最小和最大堆,jdk1.6很快就oom,jdk1.7就会一直运行下去。
是不是jdk1.7的gc频率和效率优于1.6的缘故
回复
这个细节不了解,不好说,逃:)
-verbose:gc 不就清楚了。。
其实是会崩溃的,JVM在不停地做FULL GC,内存增长地比较慢,但最终一点一点接近极限的时候,就会崩溃的。这个极限不是10M,而是一个接近10M的大小(JVM内部本身还要占据一部分)
来看oracle官方文档:http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html#par_gc.oom
即使你加了-XX:-UseGCOverheadLimit选项,可以让GC无限制的运行,但是仍然会因为对空间满了而溢出。
来人