我想知道以下情况下 JVM 的行为是什么:
- JVM 最小堆大小 = 500MB
- JVM 最大堆大小 = 2GB
- 操作系统有 1GB 内存
JVM启动后,程序运行一段时间后,使用内存超过1GB。我想知道是否会立即发生 OOM 还是先尝试 GC!
最佳答案
这取决于您有多少交换空间。
如果没有足够的可用交换空间,JVM 将无法启动,因为它无法分配足够的虚拟内存。
如果您有足够的可用交换空间,您的程序就可以启动并运行。然而,一旦 JVM 开始交换其堆,GC 时间就会急剧增加。 GC 假设它可以稍微随机地访问堆。
如果您的堆无法容纳在主内存中,则程序(甚至可能是机器)将变得无法使用。根据我的经验,在 Windows 上,此时需要重新启动。在 Linux 上,我通常发现我可以终止该进程。
简而言之,您也许能够启动 JVM,但这是一个坏主意。
关于操作系统内存不足时的 JVM 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51297069/