相同的测试代码,为什么jdk1.7没有内存溢出。而1.6内存溢出了。

发布于 2021-11-30 13:38:28 字数 470 浏览 671 评论 8

相同的测试代码,为什么jdk1.7没有内存溢出。而1.6内存溢出了。

public static void main(String[] args) {
		ArrayList<Object> list = new ArrayList<Object>();
		while(true){
			list.add(new Temp("admin", "password"));
		}
	}



堆都是设置为10m

-Xms10M -Xmx10M



如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

明月松间行 2021-12-01 20:05:13

这个测试的意义是什么

明媚如初 2021-12-01 20:04:06

其实每个版本的虚拟机都是不同的, 1.7相比于1.6来说CG肯定是有所优化得了

樱花落人离去 2021-12-01 19:49:09

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

    at Flow.main(Flow.java:8)

java1.8

一笔一画续写前缘 2021-12-01 19:48:37

我的意思是同样设置了10m的最小和最大堆,jdk1.6很快就oom,jdk1.7就会一直运行下去。

飘然心甜 2021-12-01 19:04:55

是不是jdk1.7的gc频率和效率优于1.6的缘故

醉酒的小男人 2021-12-01 18:14:53

回复
这个细节不了解,不好说,逃:)

各自安好 2021-12-01 08:15:21

-verbose:gc 不就清楚了。。

其实是会崩溃的,JVM在不停地做FULL GC,内存增长地比较慢,但最终一点一点接近极限的时候,就会崩溃的。这个极限不是10M,而是一个接近10M的大小(JVM内部本身还要占据一部分)

Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded

来看oracle官方文档:http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html#par_gc.oom

Excessive GC Time and OutOfMemoryError

The parallel collector will throw an OutOfMemoryError if too much time is being spent in garbage collection: if more than 98% of the total time is spent in garbage collection and less than 2% of the heap is recovered, an OutOfMemoryError will be thrown. This feature is designed to prevent applications from running for an extended period of time while making little or no progress because the heap is too small. If necessary, this feature can be disabled by adding the option -XX:-UseGCOverheadLimit to the command line.

即使你加了-XX:-UseGCOverheadLimit选项,可以让GC无限制的运行,但是仍然会因为对空间满了而溢出。

灵芸 2021-11-30 22:11:07

来人

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文