当 JVM 在运行时内存不足时会发生什么情况?
在考虑了很长时间提出这个问题的通用方法(并且找不到一个)之后,我只是把它作为一个具体的例子来问:
假设我有一台Linux机器,它有1 Gb的内存,可以分配给进程(物理和交换总共1 Gb)。
我在计算机上安装了一个标准的 Oracle Hotspot JVM 版本 7。如果在给定的时刻,有足够的程序在运行,使得1 Gb中只有400 Mb是空闲的,那么我在那一刻启动了一个Java程序,并使用以下JVM标志:
java -Xms256m -Xmx512m -jar myJar.jar
发生了什么?:
A. JVM 无法立即启动,是因为它将尝试分配所有 512 Mb 的内存并失败(由于目前没有足够的可用内存)?
如果 JVM 启动:
如果在某些时候,正在运行的Java进程将需要超过400 Mb的内存(并且除了当前Java进程已经使用的内存之外,仍然只有400 Mb的内存可用),会发生什么:
B. Java 进程会因 OutOfMemroyError 而失败吗?
C.它会因其他(标准)错误而失败吗?
D.是未定义的行为吗?