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

标签 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)

最佳答案

消息:

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/

相关文章:

java - 无法从java应用程序执行连续的adb命令

python - 多处理对于磁盘 I/O 有用吗?

python - 需要在 python 中通过 espeak 和 aplay 命令使用 os.system 中的变量

python - Linux 命令行调用没有从 os.system 返回它应该返回的内容?

python - check_call check_output 调用和子进程模块中的 Popen 方法之间的实际区别是什么?

java - Junit 测试预期结果的 Xml 字符串表示

java - hibernate 事件检测器

java - Apache Shiro 需要哪些数据库表?

python - 安装 pip 在 python < 3.6 中不起作用

python - 系统路径中安装了多个Python