“从 Python”调用 java 时分配超过 4 GB 的堆空间时出现问题
我正在使用 python 的 os.system 调用来运行 jar 文件。 jar 文件需要很大的堆空间,因此我使用 Xmx 分配 4 Gb 堆空间。 当我执行命令时 “java -Xms4096m -Xmx4096m -jar camXnet.jar net.txt” 从命令行它可以正确执行,但是当我通过 os.system 从 python 程序调用它时,它仅在分配的内存小于 4Gb 时才有效,否则它将无法执行。 有什么解决办法吗?
无法执行我的意思是出现一个命令窗口,指示 os.system 已被调用,然后它消失,我将检查错误代码(如果有)返回。但是,如果 xmx,xms 设置为较低的值,则不会遇到问题。
好吧,我检查了两个版本,有一个区别通过python调用的是Java HotSpot Client VM混合模式,共享而通过普通命令行调用的是Java HotSpot 64位服务器
如何使python中的os.system调用正确其中之一是 64 位服务器。
更新:我尝试使用 subprocess 模块,但 java 返回的版本与 os.system 的版本相同
I am using using os.system call from python to run jar file.
The jar file requires large heap space and thus i am allocating 4 Gb heap space using Xmx.
When i execute the command
"java -Xms4096m -Xmx4096m -jar camXnet.jar net.txt"
from command line it executes properly, however when i call it from a python program via os.system, it works only if memory allocated is less than 4Gb, otherwise it fails to execute.
Any solutions?
By fails to execute i mean that A command window appears indicating that os.system has been called and then it disappears, i will check for the error code if any being returned. however no problems are encountered if xmx,xms are set to lower value.
Ok i checked both version and there is a difference The one being called via python is Java HotSpot Client VM mixed mode,sharing while one being called via normal command line is Java HotSpot 64 bit server
How do make os.system in python call the correct one that is the 64 bit server.
UPDATE: I tried using subprocess module as yet the version of java return is same as that from os.system
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果不了解更多细节(例如您使用的操作系统),很难确定,但我猜测您使用的是 32 位版本的 Python,这意味着当您启动 Java 时,您也会获得 32 位版本的 Python。位版本的堆大小限制为 4GB。
要测试情况是否如此,请比较从命令行运行和从 Python 脚本运行时
java -version
的输出。It's hard to be sure without knowing more detail - like which OS you're on - but my guess is that you're using a 32-bit version of Python which means that when you launch Java, you're also getting the 32-bit version which has a heap size limit of 4GB.
To test if this is the case, compare the output of
java -version
when run from the command line and when run from your Python script.我在从 32 位 python 启动 64 位 Java 时遇到了同样的问题。我使用 Dave Webb 的建议解决了这个问题,将 64 位 Java.exe 的完整路径放入 python 脚本中。这工作得很好,所以没有必要使用 64 位 Python
I was having the same problem launching 64bit Java from 32bit python. I solved the problem using Dave Webb's suggestiong of putting the full path to 64bit Java.exe in the python script. This worked fine so it is not necessary to use 64 bit Python
只是一个建议,但尝试使用 subprocess.call() 而不是 os. system(),这是首选,可以处理您遇到的问题正在经历。我很好奇是否真的如此...
Just a suggestion, but try using subprocess.call() instead of os.system(), it is preferred and may handle the issue you are experiencing. I'm curious to know if it does...