从 Python 程序执行带有 -Xms 和 -Xmx 参数的 jar 文件

Executing a jar file with -Xms and -Xmx arguments from a Python program

当我尝试从我的 Python 程序中执行一个 Java jar 文件时,如下所示:

pathToMyJar = ...
argumentsToMyJar = ...
myJavaCommandLine = 'java -Xms4g -Xmx16g -jar ' + pathToMyJar + ' ' + argumentsToMyJar
print(myJavaCommandLine)
os.system(myJavaCommandLine)

我收到以下错误:

Invalid maximum heap size: -Xmx16g 
The specified size exceeds the maximum representable size.

但是当我从 PowerShell 运行相同的命令时(本质上,复制并粘贴由 Python 程序打印的命令行),以下运行正常。

PS D:\Temp> java -Xms4g -Xmx16g -jar <pathToMyJar> <argumentsToMyJar>

我错过了什么?

我已经尝试了以下方法但没有成功:

这是 Java 版本:

PS D:\Temp> java -version
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)

唯一合理的解释是您在 64 位计算机上安装了 32 位版本的 Java。显然,Java 的 32 位版本最多可以寻址 232 字节(或 4 GB)。卸载 32 位版本,然后安装 64 位版本(假设您使用 Windows)重新启动。

留言:

The specified size exceeds the maximum representable size.

指向的堆大小对于 运行 Java 可执行文件所使用的指令集架构来说太大了;即您使用的是 32 位 JVM。

我怀疑您 "ensuring that the same Java version is run on the command-line and from the Python program" 的方法不正确。您需要确保在两种 情况下都运行使用 64 位 JVM。重要的不仅仅是版本号。

(命令提示符下的 java 允许大堆的事实意味着您的计算机上同时安装了 32 位和 64 位 JRE 或 JDK。)

另一种可能性是您的 python 应用程序是 运行 每个进程内存使用的 ulimit ... 但我已经预料到了不同的错误消息。