java - 无法为对象堆保留足够的空间

标签 java memory-limit

我遇到了一个奇怪的 java 内存限制。下面我用不同的堆大小执行“java -version”。一旦我将堆设置为任何超过 30M 的值,java 就会错误退出,并提示没有可用内存。

# /usr/java/default/bin/java -Xmx30m -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)

# /usr/java/default/bin/java -Xmx40m -version
#
# There is insufficient memory for the Java Runtime Environment to continue.
# pthread_getattr_np
# An error report file with more information is saved as:
# /root/hs_err_pid6689.log

# /usr/java/default/bin/java -Xmx50m -version
Error occurred during initialization of VM
java.lang.OutOfMemoryError: unable to create new native thread

# /usr/java/default/bin/java -Xmx60m -version
#
# There is insufficient memory for the Java Runtime Environment to continue.
# pthread_getattr_np
# An error report file with more information is saved as:
# /root/hs_err_pid6703.log

根据“free”,我有很多空闲 RAM:

# free -m
             total       used       free     shared    buffers     cached
Mem:          2909       1051       1858          0         17        618
-/+ buffers/cache:        415       2494
Swap:          511          0        511

但据我所知,这显然是一个内存限制问题。当我终止一些后台进程时,我可以为“java -version”命令分配更多堆。

有人知道发生了什么吗?

最佳答案

我正在回答我自己的问题(以防万一有人遇到类似问题)。

在我的系统上,我在/etc/sysctl.conf 中有这个

vm.overcommit_memory = 2

将其设置回默认值 (0) 已解决问题:

vm.overcommit_memory = 0

关于java - 无法为对象堆保留足够的空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21558207/

相关文章:

java - 将 Java 程序做成独立的 exe(不用 JVM 运行)

java - 如何在循环中创建 try block ?

java - Chartboost Android 集成 - 如何监听加载的广告

vba - 集合最大尺寸

Java:查找 BST 中未找到的节点的深度

java - 给定一个 DateTime 对象,如何获取 Joda Time 中的 DateTimeZone?

c - 如何在 Linux 中以编程方式限制程序运行时间、内存使用以及作为特定用户

php - 允许内存大小为 268435456 字节耗尽

docker - 如何检测 Docker 容器何时达到其配置的内存限制

PHP:设置 memory_limits > 1024M 不起作用