在调用Java时,如何在Python中分配超过4GB的堆空间?

1 投票
3 回答
1748 浏览
提问于 2025-04-15 17:37

我在用Python的os.system来运行一个jar文件。这个jar文件需要很大的内存空间,所以我用-Xmx分配了4GB的内存。当我在命令行中执行命令 "java -Xms4096m -Xmx4096m -jar camXnet.jar net.txt" 时,它能正常运行。但是当我通过Python程序调用它时,只有在分配的内存小于4GB时才会成功执行,否则就会失败。

这里说的“失败执行”是指会出现一个命令窗口,显示os.system被调用了,然后窗口又消失了。我会检查是否有返回的错误代码,不过如果把xmx和xms设置为较小的值,就没有问题。

我检查了两个版本,发现有区别。通过Python调用的版本是Java HotSpot Client VM混合模式,而通过普通命令行调用的是Java HotSpot 64位服务器。

我该如何让Python中的os.system调用正确的64位服务器版本呢?

更新:我尝试使用subprocess模块,但返回的Java版本和os.system一样。

3 个回答

0

我有个建议,试试用 subprocess.call() 来代替 os.system(),这个方法更好用,可能能解决你遇到的问题。我也想知道这样做是否有效...

1

我之前也遇到过从32位的Python启动64位Java的问题。我按照Dave Webb的建议,在Python脚本里写上64位Java.exe的完整路径,结果问题解决了。这种方法很好用,所以其实不需要使用64位的Python。

2

要确定具体情况有点困难,因为我不知道你使用的是什么操作系统。不过我猜测你可能在用32位的Python版本,这样的话,当你启动Java时,也会用到32位的Java版本,而32位的版本有个限制,就是最大只能使用4GB的内存。

要验证这个猜测,你可以在命令行中运行 java -version,然后再在你的Python脚本中运行同样的命令,看看输出结果有什么不同。

撰写回答