|
|
1
2
同意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。如果你在应用程序中使用任何类型的原生库,你都必须将其重新编译为64位,但这比试图重新建立dll和其他东西的基础以最大限度地利用32位窗口上的内存要容易得多。 另一种选择是将程序拆分为多个VM,并让它们通过RMI或消息传递或其他方式相互通信。这样,每个虚拟机都可以拥有所需内存的一个子集。不过,如果不知道你的应用程序做了什么,我不确定这会有什么帮助。.. |
|
|
2
2
除非页面文件空间不足,否则问题不在于计算机内存不足。虚拟内存的全部意义在于允许进程使用比物理上可用的更多的虚拟内存。 不知道JVM是如何处理堆的,很难确切地说问题是什么,但一个常见的问题是,进程中没有足够的连续可用地址空间来扩展堆。为什么机器运行一段时间后会出现问题有点令人困惑。 我在工作中一直在研究类似的问题。我发现使用WinDBG运行程序并使用“!address”和“!address-summary”命令对于追踪进程虚拟地址空间碎片化的原因非常有价值。您还可以尝试在重新启动后运行程序,并使用“!address”命令拍摄地址空间的照片,然后在程序不再运行时执行相同的操作。这可能会让你了解这个问题。也许加载额外的DLL这样简单的事情可能会导致问题。 |
|
|
3
2
我怀疑问题是Windows内存碎片。StackOverflow上还有一个问题叫做 Java Maximum Memory on Windows XP 其中提到使用Process Explorer查看DLL映射到内存的位置,然后通过重定DLL的大小来解决问题,以便以更紧凑的方式加载到内存中。 |
|
|
4
0
使用Minimem( http://minimem.kerkia.net/ )因为该应用程序可能会解决您的问题。然而,我不确定这是你要找的答案。我希望这能有所帮助。 |
|
|
5
0
也许你应该考虑启动程序并保留内存,而不是 每次运行后结束VM。寻找不同的GC选项并释放您的对象。 |
|
|
6
0
使用微软SysInternals工具中的vmmap查看虚拟地址空间的碎片,并确定是什么破坏了空间 |
|
|
PHPLover · “支持PHP扩展或功能的端口”实际上是什么意思? 1 年前 |