JVM是否交换堆?

igetnqfo  于 2022-11-07  发布在  其他
关注(0)|答案(2)|浏览(84)

当抛出与堆空间不足相关的异常时,我增加了java Xmx内存限制。但是,我目前遇到了可能与内存相关的非常长的执行时间,但我还没有看到抛出的异常。
我想知道是什么原因导致了长时间的执行时间。JVM是否将堆交换到磁盘上?
我使用的是HotSpot 1.6.0更新34。

ki1q1bka

ki1q1bka1#

JVM不会交换到磁盘,不会。操作系统可能会这样做。您可以通过检查进程上的操作系统统计信息来检测这一点。
随着JVM内存不足,垃圾收集被越来越频繁地触发。每次运行释放的内存越少,GC的速率就越高。最终,大量的时间都花在GC上,这很可能就是您看到的速度变慢。
JVM不会等到释放了0个字节才抛出OutOfMemoryError,当GC花费的时间与释放的字节数相比太长时,它实际上会给予。

0x6upsns

0x6upsns2#

更大的堆的一个可能的后果是GC时间的增加-JVM必须分析更大的空间,所以它需要更长的时间-特别是如果它是停止世界的GC。
你能把你的问题具体化一点吗?
你使用的堆大小是多少?你看到的持续时间是多少?你的应用程序中对象的使用模式是什么?例如,几个长期存在的对象,或者很多短期存在的对象。

相关问题