JVM是否交换了堆?

时间:2013-02-05 11:22:07

标签: java heap

当抛出与堆空间不足相关的异常时,我增加了java Xmx内存限制。但是,我目前正在经历一段很长的执行时间,可能与内存有关,但我还没有看到抛出异常(尚未)。

我想知道可能导致执行时间过长的原因。 JVM是否将堆交换到磁盘?

我正在使用HotSpot 1.6.0更新34.

2 个答案:

答案 0 :(得分:11)

JVM没有交换到磁盘,没有。操作系统可以这样做。您可以通过检查流程的操作系统统计信息来检测这一点。

由于JVM内存不足,垃圾收集会越来越频繁地被触发。每次运行都会释放更少的内存,从而进一步提高GC的速度。最终花了很多时间在GC上,这可能是你看到的慢下来。

JVM不会等到释放0个字节才能抛出OutOfMemoryError。 GC实际上放弃的时间与释放的字节数相比只需要太长时间。

答案 1 :(得分:2)

更大堆的一个可能结果是GC时间增加 - JVM必须分析更大的空间,因此需要更长的时间 - 特别是如果它是一个世界上的GC。

你可以稍微充实一下你的问题吗?

您使用的是什么堆大小?你看到了多长时间?什么是应用程序中对象的使用模式?例如,一些长寿命的物体,或许多短寿命的物体。