2013-07-26 31 views
2

可以說,我的RAM是30 GB,並且我給了jmx 10 GB和jms 5 GB並啓動了java進程。如何確定堆的大小/調整大小與這些值?它是不是像5GB被當作初始堆空間一樣,10 GB留給了jvm(其餘的15 GB可用於RAM上的其他進程),或者只有5 GB被分配並增加到最大10 GB(同時其他進程是授權使用25 GB)?這是如何發生的?Java堆內存流程

+0

感謝的答案,任何好的參考? – user1873379

+0

http://middlewaremagic.com/weblogic/?tag=young-generation –

+0

哪個版本的Java? 5 GB,10 GB ...直到Java 7 ..從未聽說過... – Shashi

回答

2

JVM有一個堆,即運行時數據區,從中爲所有類實例和數組分配內存。它是在JVM啓動時創建的。

Java堆分配從最小大小-Xms開始並增加到Xmx。

  • -Xms - 設置最小可用內存爲JVM

  • -Xmx - 設置JVM的最大可用內存。 Java應用程序不能使用通過此參數定義的更多堆存儲器。

默認情況下,最大堆大小爲64 Mb。

對象的堆內存由自動內存管理 回收,稱爲垃圾回收器。該堆可能是固定大小的 ,或者可能會擴大和縮小,具體取決於垃圾收集器的策略。

所以,我認爲後者是正確的說法。

僅5 GB(XMS)被分配並增加到10 GB(XMX)(同時其它 過程被授權使用25 GB)

2
  • -Xms的最大這設置初始Java堆大小
  • -Xmx此設置最大Java堆大小

在初始化虛擬機時,保留了堆的整個空間。預留空間的大小可以通過-Xmx選項指定爲 。如果-Xms參數的值小於 -Xmx參數的值,而不是保留的所有空間 都立即提交給虛擬機。未提交的空間 在此圖中標記爲「虛擬」。堆( 永久代,年老代,以及年輕一代)的不同部分可以 增長到虛擬空間需要.....源的限制 - OTN -Tuning Garbage Collection