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