gpt4 book ai didi

java - 查看/解决 Windows XP 内存碎片的工具

转载 作者:可可西里 更新时间:2023-11-01 13:31:00 25 4
gpt4 key购买 nike

我们有一个需要大量堆空间的 java 程序 - 我们使用(在其他命令行参数中)参数 -Xmx1500m 启动它,它指定最大堆空间为 1500 MB。在刚刚重新启动的 Windows XP 机器上启动此程序时,它会正常启动和运行。但是如果程序已经运行了几次,电脑已经启动了一段时间等等,当它试图启动时我会得到这个错误:

Error occurred during initialization of VMCould not reserve enough space for object heapCould not create the Java virtual machine.

我怀疑Windows本身存在内存碎片问题,但我不知道如何证实这种怀疑。发生这种情况时,任务管理器和 sysinternals procexp 报告 2000MB 可用内存。我看过this question related to internal fragmentation

所以第一个问题是,如何证实我的怀疑?第二个问题是,如果我的怀疑是正确的,有没有人知道有什么工具可以解决这个问题?我环顾四周,但没有发现任何有用的东西,除了定期重启机器。

ps - 改变操作系统目前也不是一个可行的选择。

最佳答案

同意 Torlack 的观点,这在很大程度上是因为其他 DLL 正在加载并进入某些位置,从而将您可以为 VM 获得的内存量分成一大块。

如果你有超过 3G 的内存来移动一些 Windows 的东西,你可以在 WinXP 上做一些工作,在这里查看 PAE: http://www.microsoft.com/whdc/system/platform/server/PAE/PAEdrv.mspx

如果您的 Java 应用程序确实需要超过 1.2G 的内存,您最好的选择是查看 64 位 Windows、Linux 或 OSX。如果你在你的应用程序中使用任何类型的 native 库,你必须将它们重新编译为 64 位,但这比尝试重新设置 dll 和东西以最大化你在 32 位 Windows 上可以获得的内存要容易得多.

另一种选择是将您的程序拆分为多个 VM,并让它们通过 RMI 或消息传递或其他方式相互通信。这样每个 VM 都可以拥有您需要的内存的某个子集。在不知道您的应用程序做什么的情况下,我不确定这是否会以任何方式提供帮助...

关于java - 查看/解决 Windows XP 内存碎片的工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/103622/

25 4 0
文章推荐: php - 在 PHP 中设置 SOAP header XML 标记属性
文章推荐: html - 当主
包装器中有第二个