首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么java会在内存很大的时候抛出OutOfMemoryError呢?

为什么java会在内存很大的时候抛出OutOfMemoryError呢?
EN

Stack Overflow用户
提问于 2015-12-07 21:37:10
回答 1查看 94关注 0票数 0

例如:

代码语言:javascript
复制
Runtime.getRuntime().maxMemory(); // 1216348160, ~1.2Gb
Runtime.getRuntime().totalMemory(); // 188997632, ~188Mb
Runtime.getRuntime().freeMemory(); // 93796384, ~93Mb

我认为在这种情况下,JVM会尝试分配更多的内存,达到maxMemory限制,而不是抛出面向对象对象模型。

在java之前的7天里,如果PermGen耗尽了,就可能发生这种情况,但现在PermGen被无界的元空间所取代。

物理机上有大量空闲的交换空间,因此JVM应该完全能够分配更多的内存。

EN

回答 1

Stack Overflow用户

发布于 2015-12-07 22:49:14

您正在尝试使用"new“运算符创建一个大小为1000000000的字符串数组。所以这个数组能够容纳1000000000个对象引用。我们所知道的内存是从java堆中分配的。堆的最大大小(根据maxMemory)为1.2 GB。

我的理论(基于下面的数学)-假设它是一台32位机器,每个对象引用将占用4个字节。因此,1000000000个对象引用将占用4000000000个字节,接近3.7G,而最大堆仅为1.2G。因此这会导致OOM java堆错误。

-Madhu。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34134913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档