当前位置: 首页 > 面试题库 >

尽管有足够的可用内存,但巨大的数组仍将导致内存不足

杜成和
2023-03-14
问题内容

使用该-Xmx1G标志提供一个1 GB的堆,以下功能可以正常工作:

public class Biggy {
    public static void main(String[] args) {
        int[] array = new int[150 * 1000 * 1000];
    }
}

该阵列应代表约600 MB。

但是,以下引发OutOfMemoryError:

public class Biggy {
    public static void main(String[] args) {
        int[] array = new int[200 * 1000 * 1000];
    }
}

尽管该阵列应代表约800 MB,因此很容易装入内存

丢失的记忆在哪里消失了?


问题答案:

在Java中,堆中通常有多个区域(和子区域)。您拥有一个年轻且历久弥新的地区,拥有最多的收藏家。大阵列会立即添加到租用区域,但是根据您的最大内存大小,将为年轻空间保留一些空间。如果您缓慢分配内存,这些区域将调整大小,但是像您看到的那样,像这样的大块可能会失败。

给定的内存通常相对便宜(并非总是如此),我只是将最大值增加到了您想要的应用程序使用过多的位置而使其失败的地步。

顺便说一句:如果您有一个如此大的结构,您可以考虑使用直接内存。

IntBuffer array = ByteBuffer.allocateDirect(200*1000*1000*4)
                            .order(ByteOrder.nativeOrder()).asIntBuffer();

int a = array.get(n);
array.put(n, a+1);

编写它有点乏味,但是有一个很大的优势,它几乎不使用堆。(头部少于1 KB)



 类似资料:
  • 问题内容: 我使用io.Copy()复制文件,大约700Mb,但这会导致内存不足 错误信息如下: 我为buf分配了足够的内存,这导致bodyWriter.CreateFormFile()中的内存不足 问题答案: 这是因为您正在“复制”到,这是内存中的缓冲区,从而迫使Go尝试分配与整个文件一样大的内存块。 根据您的使用情况,您似乎正在尝试通过HTTP流式传输文件?在这种情况下,请勿将传递给,而是直接

  • 我使用mockito 1.8.3、jacoco 0.72和maven 3.0.5 surefire插件(2.12.4)来执行单元测试并生成覆盖报告,它运行良好。 随着越来越多的测试被添加,它开始不工作。在测试执行过程中,我不断地遇到内存不足的错误,并且无法找到一种方法来找出问题所在。

  • 问题内容: 我试图通过运行以下命令将HWIOAuthBundle添加到我的项目中。 HWIOAuthBundle github:https : //github.com/hwi/HWIOAuthBundle 当我尝试运行composer时,我遇到了内存不足错误。 将版本^0.6.0@dev用于hwi / oauth-bundle将版本^1.2@dev用于php-http / guzzle6-ada

  • 我正在努力解决古老的字谜问题。多亏了许多教程,我能够迭代一组字符串,递归地找到所有的排列,然后将它们与英语单词列表进行比较。我发现的问题是,在大约三个单词之后(通常是关于“变形”之类的东西),我会得到一个OutOfMemory错误。我试着把我的批分成小的集合,因为它似乎是消耗我所有内存的递归部分。但即使只是“变形”也把它锁起来了... 编辑:根据出色的反馈,我已经将生成器从排列更改为工作查找: 它

  • 问题内容: 我安装了16gb内存的Elasticsearch。我开始使用聚合,但是在尝试发出以下查询时遇到“ java.lang.OutOfMemoryError:Java堆空间”错误: query_string本身仅返回1266次匹配,因此OOM错误让我有些困惑。 我是否正确使用了聚合?如果没有,我该怎么做才能解决此问题?谢谢! 问题答案: 您正在将整个-,-和- 字段加载到内存中以进行汇总。这

  • 问题内容: 我的java appengine应用程序中有几个servlet,它们对内存进行排序并需要几秒钟的时间才能完成。这些完全没有错误。 但是,我最近为appengine启用了appstats并开始收到以下错误: 问题答案: 我想知道这是否可以帮助您减少OutOfMemoryErrors的发生: 如何减少Google App Engine Java上Appstats的内存使用量