当我尝试从 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>
我错过了什么?
我尝试了以下方法,但没有成功:
- 用 subprocess.call() 替换 os.system() 调用,结果相同
- 将 -Xmx16g 降低到较低的值(我的 64 位计算机上有 256G RAM)
- 确保命令行和 Python 程序运行相同的 Java 版本。
这是 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)
最佳答案
消息:
The specified size exceeds the maximum representable size.
指向的堆大小对于用于运行 Java 可执行文件的指令集体系结构来说太大;即您使用的是 32 位 JVM。
我怀疑您的方法“确保在命令行和 Python 程序上运行相同的 Java 版本” 是不正确的。您需要确保在这两种情况下都运行 64 位 JVM。重要的不仅仅是版本号。
(命令提示符下的 java
允许使用大堆这一事实意味着您的计算机上同时安装了 32 位和 64 位 JRE 或 JDK。)
另一种可能性是您的 python 应用程序在每个进程的内存使用量上使用 ulimit 运行...但我预计会出现不同的错误消息。
关于java - 从 Python 程序中使用 -Xms 和 -Xmx 参数执行 jar 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27761188/