lysu'''

          追求借鑒任何有益事物

          Sun HotSpot JVM內(nèi)存管理及垃圾收集

          轉(zhuǎn)自:http://blog.csdn.net/watchnight/archive/2009/12/11/4987065.aspx

          內(nèi)存模型(內(nèi)存池)

          從上圖可以看出,一個java進程主要分為“Java Heap”和“C Heap”兩個部分。只有“Java Heap”是JVM的GC對象。

          從J2SE 5.0開始,JVM啟動時會默認選擇按“server VM ”啟動還是按“client VM ”,具體選擇策略參照下面的連接。

          Server-Class Machine Detection

          啟動方式選擇好以后,開始選擇GC方法,根據(jù)GC方法的不同,為每塊內(nèi)存池設(shè)置不同的默認值。關(guān)于GC方法的選擇,參照下面的連接。

          Garbage Collector Ergonomics

          另外,JVM一共提供了4中GC方法,根據(jù)業(yè)務(wù)的不同,可以選擇不同的GC方法。GC方法詳細介紹,參見下面的連接。

          Memory Management Whitepaper [pdf]

          根據(jù)GC算法的不同,GC的名字,以及內(nèi)存池的名字都不一樣。

          J2SDK 5提供了一些MXBean,通過這些MXBean可以取得具體的名字。

          如:java.lang.management.GarbageCollectorMXBean和java.lang.management.MemoryMXBean

          (1)-XX:+UseConcMarkSweepGC

           GC名:

             ParNew

             ConcurrentMarkSweep

           內(nèi)存池名:

             CMS Perm Gen

             Par Eden Space

             Par Survivor Space

             Code Cache

             CMS Old Gen

          (2)-XX:+UseParallelGC

           GC名:

             PS Scavenge

             PS MarkSweep

           內(nèi)存池名:

             PS Survivor Space

             PS Perm Gen

             PS Old Gen

             PS Eden Space

             Code Cache

          (3)-XX:+UseParallelOldGC

           GC名:

             PS Scavenge

             PS MarkSweep

           內(nèi)存池名:

             PS Survivor Space

             PS Perm Gen

             PS Old Gen

             PS Eden Space

             Code Cache

          (4)-XX:+UseSerialGC

           GC名:

             Copy

             MarkSweepCompact

           內(nèi)存池名:

             Survivor Space

             Perm Gen

             Tenured Gen

             Eden Space

             Code Cache

          關(guān)于"Code Cache"的說明,資料比較少,下面的連接中,只有一句介紹,對普通程序員來說也夠用了。

          http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html

          我們可以看到,每種算法,GC都是有兩個,一個是minor collection,一個是major collection(也叫FullGC)。

          JVM還提供了一個System.gc(),讓程序員主動GC,System.gc()是minor還是major?答案是major。參見下面的連接。

          http://java.sun.com/docs/hotspot/gc1.4.2/faq.html

          從 Java SE 6 Update 14開始,又增加了一個名叫G1的垃圾收集算法。跟前面的4種內(nèi)存管理模式完全不一樣。

          具體沒有研究過,算法詳細參見下面的連接。

          http://java.sun.com/javase/technologies/hotspot/gc/g1_intro.jsp

          JVM中的Object是如何分配,如何收集的?什么時候使用minor什么時候使用major?什么時候發(fā)生OutOfMemoryException?

          關(guān)于這個問題,HP網(wǎng)站上有一篇詳細介紹GC的PPT,值得一看。

          Memory Management and Garbage Collection (PDF, 1.4MB)

          posted on 2011-12-25 16:32 lysu 閱讀(1073) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 景东| 资溪县| 米脂县| 太湖县| 虞城县| 茂名市| 西丰县| 西和县| 什邡市| 同德县| 历史| 呼玛县| 长乐市| 内黄县| 昆明市| 石泉县| 扶风县| 赤水市| 永昌县| 台南县| 乐亭县| 科尔| 河曲县| 甘孜| 田林县| 洪泽县| 罗平县| 清流县| 连云港市| 遵化市| 岑巩县| 根河市| 宜州市| 沙湾县| 资兴市| 阳城县| 光山县| 古丈县| 织金县| 托里县| 玉屏|