Ste*_*nie 5 java memory windows windows-xp memory-management
我们有一个需要大量堆空间的java程序 - 我们从(在其他命令行参数中)启动参数-Xmx1500m,它指定最大堆空间为1500 MB.在刚刚重新启动的Windows XP机器上启动此程序时,它将启动并运行没有问题.但是如果程序运行了几次,计算机已经运行了一段时间,等等,当它试图启动时我得到这个错误:
Error occurred during initialization of VM Could not reserve enough space for object heap Could not create the Java virtual machine.
我怀疑Windows本身正在遭受内存碎片化,但我不知道如何证实这种怀疑.在发生这种情况时,任务管理器和sysinternals procexp报告2000MB可用内存.我看过这个与内部碎片有关的问题
所以第一个问题是,我如何确认我的怀疑?第二个问题是,如果我的怀疑是正确的,有没有人知道解决这个问题的任何工具?我看了很多,但除了定期重新启动机器外,我还没有发现任何有用的东西.
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。如果您在应用程序中使用任何类型的本机库,则必须将它们重新编译为 64 位,但这比尝试重新设置 dll 和其他内容以最大化在 32 位 Windows 上获得的内存要容易得多。
另一种选择是将您的程序拆分为多个虚拟机,并让它们通过 RMI 或消息传递等方式相互通信。这样,每个虚拟机都可以拥有所需内存的某些子集。在不知道你的应用程序做什么的情况下,我不确定这是否会有任何帮助,但......
| 归档时间: |
|
| 查看次数: |
6843 次 |
| 最近记录: |