java - java 内存不足错误?即使我给了 JVM 足够的初始和最大内存大小

标签 java collections out-of-memory heap-memory

我有一个应用程序将使用 3 亿大小的 HashMap 。为此,我初始化了 JVM,初始堆大小和最大堆大小均为 16 GB,即 (java -Xms16384M -Xmx16384M),但我收到了 java OutOfMemoryError。我的机器有 32 GB RAM,安装了 RedHat Linux 操作系统。我观察到 JVM 仅使用 Linux 中“top”命令中 RAM 的 25%,即 8GB,即使我将其设置为 16GB,它也仅使用 8GB。

我想知道 JVM 是否限制了 RAM?

如何配置 JVM 以使用给定的完整最小和最大堆大小?

最佳答案

你能试试这个程序吗?

System.out.println("Max memory "+Runtime.getRuntime().maxMemory()/100 /1000+" MB.");
int mb = 0;
try {
    List<byte[]> bytes = new ArrayList<>();
    while (true) {
        bytes.add(new byte[1000 * 1000]);
        mb++;
    }
} catch (OutOfMemoryError expected) {
}
System.out.println("OOME after " + mb + " MB allocated");

它会根据您的设置打印什么?对于 -mx8g 我得到

Max memory 7635 MB.
OOME after 7025 MB allocated

对于-mx12g我得到

Max memory 11453 MB.
OOME after 10012 MB allocated

使用-mx12g -XX:MaxNewSize=512m我得到

Max memory 12705 MB.
OOME after 12863 MB allocated

关于java - java 内存不足错误?即使我给了 JVM 足够的初始和最大内存大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8522082/

相关文章:

java - OpenCSV java.lang.NoSuchMethodException : Unknown property 'X' on class Y

java - Apache Camel spring splitter 与聚合器 xml 并行处理不像 Java DSL 那样工作

java - sitemesh和spring MVC装饰器模式问题

Java:对列表列表进行排序

Java - BufferedImage (ImageIO.Read) OutOfMemory 堆空间

java - 使用 maven 将版本号输出到文本文件

c# - 是否可以将任意数据保存到 C# 中的文件中?

reactjs - 使用@mmfpeg React 连接多个视频时出现 "memory access out of bounds"错误

python list n files then next n files in a directory并将其映射到映射器函数

list - 如何在 Scala 的列表列表中求和/合并每个值