gpt4 book ai didi

java - 为什么会出现堆内存不足异常?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:21:33 24 4
gpt4 key购买 nike

我正在尝试分配一个大矩阵(大约 10GB)。我正在使用 64 位 JVM 开发 64 位机器。然后我的进程应该有可用的 2^64 字节并且我已经将 JVM 堆大小设置为 128G(如果这很重要,我的机器中有 16GB 的 RAM)。我的理解是我应该从操作系统获取内存,不需要的矩阵单元将被操作系统换出。但是我遇到了上述异常。

编辑:

这就是我定义矩阵的方式:

Jama.Matrix A = new Matrix(num_words, num_documents);

其中 num_words 大约为 100k,num_documents 大约为 35k。另外值得一提的是类型是double

编辑2:

相关标志:

-Xms40m
-Xmx128g
-d64

最佳答案

在这方面,JVM 作为 native 进程工作:JVM 从操作系统请求内存,操作系统可以在交换内存中分配内存。

您可以在 Java 中分配的内存不取决于您的 RAM,而是取决于您在运行 JVM 时指定的命令行选项 -Xmx。如果 RAM 中的内存不足,JVM 会从交换中接收它,并且(我相信)甚至不知道这一点。

但是,

  • 在某些操作系统(Windows XP)中,限制为 4G。
  • JVM 中的堆不是为脱离磁盘而设计的。
  • 掉期有限。

如果您需要处理大数据,则需要使用 BigMemory 产品(EhCache 或 Terracotta)。

最后,运行 jvisualvm 或使用 -verbose:gc 参数来查看堆分配情况。

关于java - 为什么会出现堆内存不足异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21361042/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com