我们有一个需要大量堆空间的 java 程序 - 我们以(以及其他命令行参数)参数 -Xmx1500m 开始它,它指定最大堆空间为 1500 MB。在刚刚重新启动的 Windows XP 机器上启动此程序时,它将毫无问题地启动和运行。但是如果程序运行了几次,计算机已经启动了一段时间等,当它尝试启动时,我得到这个错误:
初始化虚拟机时出错 无法为对象堆保留足够的空间 无法创建Java虚拟机。
我怀疑Windows本身存在内存碎片,但我不知道如何证实这种怀疑。发生这种情况时,任务管理器和 sysinternals procexp 报告 2000MB 可用内存。我看过这个与内部碎片有关的问题
所以第一个问题是,我如何确认我的怀疑?第二个问题是,如果我的怀疑是正确的,有没有人知道解决这个问题的任何工具?我环顾四周,但除了定期重新启动机器之外,我没有发现任何有用的东西。
ps - 改变操作系统目前也不是一个可行的选择。