Если вы долго размышляете об общем способе задать этот вопрос (и не найдя его), я просто спрошу его как конкретный пример:
Предположим, что у меня есть машина Linux, у которой есть 1 Гб памяти, которую она может выделить для процессов (физические и своп-итоги 1 Гб).
У меня на компьютере установлена стандартная версия JVM версии 7 для Hotspot. Если в данный момент есть достаточно программ, которые работают только 400 Мб из 1 Гб, и я запускаю в это время программу Java со следующими флагами JVM:
java -Xms256m -Xmx512m -jar myJar.jar
Что происходит?
а. JVM не запускается сразу, потому что он попытается выделить всю память 512 Мбайт и потерпеть неудачу (из-за того, что на данный момент недостаточно доступной памяти)?
если запускается JVM:
если в какой-то момент для запуска Java-процесса потребуется более 400 МБ памяти (а там еще 400 Мб свободной памяти, кроме того, что уже используется в текущем Java-процессе), что произойдет:
В. приведет ли процесс Java с OutOfMemroyError?
С. не будет ли он с другой (стандартной) ошибкой?
Д. это поведение undefined?