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

2024-10-01 17:42:03 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我得到以下错误:

^{pr2}$

但是当我从PowerShell运行相同的命令时(本质上是Python程序打印的命令行的复制和粘贴),下面的代码运行得很好。在

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

我错过了什么?在

我尝试了以下方法,但都是徒劳的:

  • 更换操作系统()与subprocess.call()结果相同
  • 将-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)

Tags: 命令行程序版本versionjavatempjartm
2条回答

信息:

The specified size exceeds the maximum representable size.

表示堆的大小对于运行Java可执行文件所使用的指令集体系结构来说太大了;也就是说,您使用的是32位JVM。在

我怀疑您用于确保在命令行和Python程序“中运行相同的Java版本”的方法是不正确的。您需要确保在两种情况下都运行64位JVM。重要的不仅仅是版本号。在

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

另一种可能是,您的python应用程序在每进程内存使用率上有ulimit。。。但我预计会有不同的错误消息。在

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

相关问题 更多 >

    热门问题