java - 设置 Java 堆大小不适用于 256GB RAM 64 位机器

标签 java memory heap-memory

我一直在努力寻找这个问题的答案,但还是找不到。

我有一台具有 256 GB RAM 的 64 位机器。

我正在尝试执行一个链接到 MySQL 的 Java 程序。它需要一个安静的大堆大小,因为当我在几分钟后使用 VM 参数 -Xmx1024m 时会弹出:

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

但是,当我尝试通过-Xmx2048m或更大的设置程序VM参数时,它不起作用并说:

Error occurred during initialization of VM
Could not reserve enough space for 2097152KB object heap

我读到设置 -Xmx2048 对于 64 位机器来说不是问题,但我真的不知道为什么它在我的机器上不起作用。

java -version 输出: enter image description here

wmic OS 获取 FreePhysicalMemory/Value 输出:

FreePhysicalMemory=251663664

wmic computersystem 获取 TotalPhysicalMemory 输出:

TotalPhysicalMemory
274811621376

wmic os 获取 osarchitecture 输出

OSArchitecture
64-bit

我无法执行 systeminfo|find "Memory",因为它说语法错误。我也不知道为什么。

最佳答案

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

此消息表明 java 堆没有足够的空间来进行进一步的分配。 您似乎已设置为 1G 的 Xmx,这对于您的应用程序来说是不够的 否则应用程序可能会泄漏占用java堆空间的内存。

Error occurred during initialization of VM
Could not reserve enough space for 2097152KB object heap

在虚拟机初始化期间。 JVM 执行从堆到 JIT 模块的各种初始化。 如果 JVM 找不到 请求的 Xmx 的连续内存空间然后将抛出上述错误消息。

这些是虚拟内存分配,所以请不要与物理内存值混淆

请运行命令 java -verbose:init -Xmx2048 -version

此命令将告诉 JVM 在初始化时经历的步骤以及失败的步骤。

关于java - 设置 Java 堆大小不适用于 256GB RAM 64 位机器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28293649/

相关文章:

c - C 中的动态数组用于内存映射

java - java.util.concurrent 中的内存一致性

java - 从 JMeter SampleResult 响应中提取数据

java - 使用 rowMapper 将 jsonb 列映射到 java 模型

c++ - Visual Studio 15 - 是否有更好的方法来查看/解释内存窗口中的内存?

java - 高 PermGen,但堆使用率低

java - 由于内存不足错误,Openshift Wildfly 10 自动重新启动

c++ - Win32 "move"能否堆分配内存?

java - 如何在 JavaFX 中设置字体的字母间距(又名跟踪)?

java - 在 Java 中获取字符串的特定部分