“从 Python”调用 java 时分配超过 4 GB 的堆空间时出现问题

发布于 2024-08-16 22:38:03 字数 533 浏览 9 评论 0原文

我正在使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

情独悲 2024-08-23 22:38:03

如果不了解更多细节(例如您使用的操作系统),很难确定,但我猜测您使用的是 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.

没有伤那来痛 2024-08-23 22:38:03

我在从 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

℉絮湮 2024-08-23 22:38:03

只是一个建议,但尝试使用 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...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文