我的Java应用程序在Windows Server 2008 R2和JDK 1.6上运行 当我使用JConsole监视它时,提交的虚拟内存会随着时间的推移而不断增加,而堆内存使用率则会低于50MB。
最大堆大小为1024MB。
应用程序会随着时间的推移创建许多小的,短期的事件对象。行为就好像每个堆分配都是针对已提交的虚拟内存计算的。
当提交的虚拟内存大小接近1000MB时,应用程序因本机内存分配失败而崩溃。
我的结论是2GB的虚拟地址空间已经用尽。
为什么JConsole会显示已提交的虚拟地址空间随着时间的推移而增长,即使堆不会随着时间的推移而增长?