操作系统内存不足时的 JVM 行为

标签 jvm

我想知道以下情况下 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/

相关文章:

Java asm编译器

java - 为什么我可以在 Scala 中定义通用异常类型?

java - 提高 JVM 和 ANT 性能

java - JVM是如何进行方法查找和调用的?

java - 在java中,为什么闭包变量需要声明为final?

java - 如何在Eclipse中调试openjdk 9(主要是hotspot)源码?

java - 如何修改默认 JVM 设置

java - jvisualvm 连接到远程 jstatd 不显示应用程序

java - 为什么使用 invokedynamic 调用 Java 8 lambda?

javascript - 将 kotlin 代码编译为 JVM 和 JavaScript