Pet*_*Mmm 6 java memory-management
我总是对堆内存行为有疑问.
分析我的应用程序我得到上面的图表.好像很好.但我不明白为什么,在GC时间,堆长痘痘位,即使有足够的内存(红圈).
这意味着对于一个长期运行的应用程序,它将在一段时间内耗尽堆空间?
不必要.垃圾收集器可以以其认为合适的任何方式自由使用最大分配堆.根据当前行为推断未来的GC行为(但具有不同的内存条件)绝不能保证准确.
这确实有一个令人遗憾的副作用,即确定是否会发生OutOfMemoryError是非常困难的.一个合法的(但可能非常低效)垃圾收集器可能只是在内存上限被击中之前什么都不做,然后做一个停止世界的标记并扫描整个堆.通过这个实现,你会看到你的记忆不断增加,并且可能会想要说OOME即将来临,但你无法分辨.
如此小的堆大小,这里的增加可能只是由于簿记/缓存大小对齐等.你说的是在规模上看不到50KB左右的分辨率,所以我不应该担心.
如果您确实认为存在OutOfMemoryErrors的合法风险,则表明这一点的唯一方法是将压力测试放在一起并显示应用程序确实耗尽了堆空间.