1. 程式人生 > ><<深入分析javaWeb技術內幕>>讀書筆記-JVM內存管理2

<<深入分析javaWeb技術內幕>>讀書筆記-JVM內存管理2

空間 不同 class logs 減少 src 一次 ges jvm垃圾回收

JVM垃圾回收策略

1.靜態內存分配和回收

  編譯時已經確定了內存空間大小,程序被加載後則一次性分配好內存空間.程序結束後,則對應棧幀撤銷,分配的靜態內存空間則被回收.

2.動態內存分配和回收

  程序運行動態分配內存空間,回收時則由垃圾收集器負責.

3.垃圾收集器

A.正確的檢測出垃圾對象(關鍵功能)

B.釋放垃圾對象占用的內存空間

4.基於分代的垃圾收集算法(hostpot)

算法設計思路:

  把對象按照壽命的長短進行分組(年輕代,年老代),新創建的對象分配在年輕代中,對象經過幾次垃圾回收後,仍然存活的對象則劃分到年老代中.年老代的收集不像年輕代那麽頻繁,這樣就減少了每次垃圾收集時所要掃描的對象數量,從而提高了垃圾回收效率.

技術分享

             基於分代的對結構

JVM將整個堆劃分為Young區,Old區,Perm區,分別存放不同年齡的對象.

  • Young區:分為Eden區和Survivor區,新創建的對象都在Eden區,當Eden區滿後會觸發minorGC,將Eden區仍然存活的對象復制到其中一個Servivor區中,另外一個Servivor區中的存活對象也復制到這個Survivor中,以保證始終有一個Servivor區是空的.
  • Old區:Servivor區中對象存放不下後會觸發minorGC,將存活的對象放入Old區,Servivor區中的對象足夠老,會直接放入Old區.如果Old區滿了後會觸發FullGC,回收整個堆內存.
  • Perm區:這個地方存放的基本都是類的class對象,如果一個類被頻繁的加載可能會導致Perm區滿,Perm區的垃圾回收也是由FullGC觸發的.

Sun對堆中不同代大小給出的建議:

一般建議Young區的大小為整個堆的1/4,而Young區中Survivor區一般設置為整個Young區的1/8

<<深入分析javaWeb技術內幕>>讀書筆記-JVM內存管理2