gpt4 book ai didi

java on osx - xmx 被忽略?

转载 作者:行者123 更新时间:2023-12-01 09:35:44 25 4
gpt4 key购买 nike

我有两台运行 Mac OS X El Capitan 和 Ubuntu 16.04 LTS 的计算机。两者都安装了 Java SDK 1.8.0_101。

当我尝试在 Ubuntu 上启动游戏服务器时,内存多于可用内存,我得到以下输出:

$ java -Xms200G -Xmx200G -jar craftbukkit.jar nogui
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f9b6e580000, 71582613504, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 71582613504 bytes for committing reserved memory.
# An error report file with more information is saved as:
#

在 Mac 操作系统上我没有收到此错误:

$ java -Xms200G -Xmx200G -jar craftbukkit.jar nogui
Loading libraries, please wait...

两台计算机都有 8GB 内存。我也尝试过使用另一台 Apple 计算机 - 同样的问题。

这是java mac版本的bug吗?

(有没有办法强制限制内存使用,例如 1GB?-Xmx1G 不起作用,我找不到其他原因。谷歌上也没有)

谢谢!

抱歉我的英语不好......

最佳答案

操作系统的工作方式有所不同。 Linux 有一个“固定”交换的概念 - 这是基于物理 RAM + 添加到系统的各种交换文件/交换分区。这被认为是可以提交的最大内存限制。

OSX 不认为交换是固定的。随着操作系统上提交的内存越来越多,它将继续添加交换文件(您可以在 /var/vm 中看到添加的文件)。

因此,您可以要求 OSX 提供比可用内存更多的内存,它会有效地回复“ok”,而在 Linux 下,它会回复“no”。

上限仍然由 java 强制执行 - 一旦堆超过指定的大小,它将返回 java.lang.OutOfMemoryError: Java heap space 异常,因此如果您指定-Xmx1G 那么它应该由 JRE 强制执行。

您可以通过一个简单的测试程序看到差异:

import java.util.Vector;

public class memtest {

public static void main(String args[]) throws Exception {
Vector<byte[]> v = new Vector<byte[]>();
while (true) {
v.add(new byte[128 * 1024]);
System.out.println(v.size());
}

}
};

如果此程序使用 -Xmx100M 运行,则在使用 -Xmx1G 运行时,它会在大约 730 次迭代后终止,并显示 Java heap space 消息在大约 7300 次迭代后,它会终止并显示 Java 堆空间 消息,表明 Java 虚拟机正在强制执行该限制。

关于java on osx - xmx 被忽略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38958511/

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