想了很長時間的通用方式來提出這個問題(並沒有找到一個),我只是要問它作爲一個具體的例子:當運行時JVM內存不足以分配時會發生什麼?
假設我有一臺Linux機器有1 Gb它可以分配給進程的內存(物理和交換總計1 Gb)。
我在機器上安裝了標準的Oracle Hotspot JVM版本7。如果在給定時刻,也有運行這樣只有400 Mb內存1 GB的是免費的足夠的程序,我在用下面的JVM標誌的那一刻開始Java程序:
java -Xms256m -Xmx512m -jar myJar.jar
什麼happends? :
答:JVM無法立即啓動,因爲它會嘗試分配所有512 Mb內存並失敗(由於目前沒有足夠的可用內存)?
如果JVM啓動:
如果在某些點上運行的Java進程將需要超過400 MB的內存(現在仍然有隻有400 MB的內存,這比什麼當前Java進程已經使用不含其它),會發生什麼情況:
B. Java過程會失敗,併發生OutOfMemroyError?
C.它會失敗與其他(標準)錯誤? D.它是未定義的行爲?
D.是不確定的行爲?
我相信選項(B),但是如果只有200 Mb(少於Xms)可用,然後選項A. – Scorpion