当引发与堆空间不足相关的异常时,我增加了Java Xmx内存限制。但是,我目前正在经历很长的执行时间,这可能与内存有关,但是还没有看到抛出异常(尚未)。
我想知道什么可能导致较长的执行时间。 JVM是否将堆交换到磁盘?
我正在使用HotSpot 1.6.0更新34。
最佳答案
JVM不会交换到磁盘,否。操作系统可能会这样做。您可以通过检查进程中的OS统计信息来检测到这一点。
随着JVM内存不足,越来越多地触发垃圾回收。每次运行都会释放更少的内存,从而进一步提高GC的速率。最终,大量时间花费在GC上,这很可能是您看到的速度降低了。
JVM不会等到释放0个字节以抛出OutOfMemoryError
。当GC花费的时间相对于释放的字节数太长时,它将实际上放弃。