使用Python程序中的-Xms和-Xmx参数执行jar文件

时间:2015-01-04 00:42:21

标签: java python os.system

当我尝试从我的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)

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

消息:

  

指定的大小超出了最大可表示大小。

指向堆大小,该大小对于用于运行Java可执行文件的指令集体系结构而言太大;即你使用的是32位JVM。

我怀疑&#34;确保在命令行和Python程序&#34; 上运行相同的Java版本的方法是不正确的。您需要确保在两个情况下运行64位JVM。重要的不仅仅是版本号。

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

另一种可能性是你的python应用程序在每个进程的内存使用情况下运行ulimit ...但是我预计会有不同的错误消息。