我嘗試啓動需要大量內存的java進程。出於某種原因,如果我爲進程指定了超過19G的RAM,它將不起作用。免費和頂級節目,我有23G的免費內存,所以我不知道爲什麼會出現這個錯誤。該系統有足夠的內存,但「無法爲對象堆預留足夠的空間」
total used free shared buffers cached
Mem: 24158 1047 23111 0 16 356
-/+ buffers/cache: 673 23485
Swap: 2204 0 2204
開始與這些JVM選項的過程:
-XX:+UseConcMarkSweepGC -server -d64 -Xms4g -Xmx22g
版本:
java version "1.7.0_02"
Java(TM) SE Runtime Environment (build 1.7.0_02-b13)
Java HotSpot(TM) 64-Bit Server VM (build 22.0-b10, mixed mode)
但是,如果我指定19G的XMX它的工作原理。
所以-XX: MaxPermSize不包含在Xmx中? – user3111525 2012-01-10 12:37:32
不,它會單獨計算您的總內存消耗! '-Xms'和'-Xmx'只能控制堆的大小。有關更多詳細信息,請參閱[本文討論](http://stackoverflow.com/questions/4223809/is-java-permgen-space-part-of-the-total-vm-memory)。 – r3nj1 2012-01-10 12:39:12
@frankmoss - 還有更多的東西不在堆中;線程堆棧,用於JVM映像的內存,用於內存映射文件和直接緩衝區的內存,由本地代碼分配的內存使得'malloc'調用等等。 – 2012-01-10 12:42:55