我想知道以下情况下的JVM行为是什么:
JVM启动后,程序运行了一段时间,它使用了超过1GB的内存。我想知道OOM是立即发生还是先尝试GC!
答案 0 :(得分:0)
这取决于您有多少交换空间。
如果您没有足够的可用交换空间,则JVM将无法启动,因为它无法分配足够的虚拟内存。
如果您有足够的免费交换空间,则程序可以启动和运行。但是,一旦JVM开始交换其堆,GC时间就会急剧增加。 GC假定它可以随机访问堆。
如果您的堆无法容纳在主内存中,则该程序甚至可能无法使用该计算机。以我的经验,在Windows上,此时需要重新启动。在Linux上,我通常可以杀死进程。
简而言之,您也许可以启动JVM,但这不是一个好主意。