1. 程式人生 > >GC垃圾回收

GC垃圾回收

gc垃圾回收

  1. gc=full gc +young gc

  1. Java jvm 內存=堆內存+非堆內存

  2. 堆內存(-Xms-Xmx=年輕代(-Xmn+年老代

-Xms,初始分配內存,-Xmx最大分配內存,一般情況下設置成一樣的值

  1. 年輕代=Eden+s0+s1

  2. 非堆內存=持久代(-XXPermSize -XX:MaxPermSize+code cache(-XX:reservedcodecachesize)

-XX:PermSize(初始值大小)-XX:MaxPermSize(最大值)

jvm內存模型圖】

技術分享

  1. gc:自動檢測和釋放不再使用的內存。(垃圾回收)

  2. Minor gc:頻率快是正常 ,也叫young gc

  3. Major gc:盡可能讓他頻率少【重點關註】 ,也叫full gc

  4. 持久代(Perm):使用的class對象

  5. Jvm的生命周期:①一個對象,首先放置在Eden區,結果發現需繼續使用,不能進入gc回收,則會放置在s區,s0s1隨意。②如果放在s0區,過一段時間仍不能gc回收,則會放置在s1區③再過一段時間仍不能回收,則會存放在年老代區域。④在年老代存放很長時間後,可能被major gc回收,也可能繼續存活

  6. Jvm內存參數設置

  • -Xms-Xmx設置為一樣的值,設置為可用內存的80%

  • -Xmn設置為堆內存的3/8

  • -XX:PermSize(默認為物理內存的1/64)-XX:MaxPermSize(默認為物理內存的1/4)

  1. Jvm公共參數配置

  • -server:服務器模式,一定要放在所有參數之前

  • -Xss:指定每個線程占的大小(建議不要超過1M

  • -XX:SurvivorRatio:設置年輕代裏面Eden區和s區的大小比值

  • -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=path_addressJVM崩潰的時候會打印出heap dump

  • -XX:+AggressiveOpts:啟用這個參數,則每當JDK版本升級時,你的JVM都會使用最新加入的優化技術(如果有的話)

  • -Djava.awt.headless=true

    :一般放在最後,主要是解決圖表不兼容

  1. gc的類型

  • Serial GC:適用內存占用比較少的應用,性能最差

  • Parallel GC:年輕代多線程,年老代使用單線程

  • Parallel Old GC:年輕代和年老代都使用多線程收集垃圾

  • CMS:多線程並發回收垃圾,適用於不能忍受長時間停頓要求快速響應的應用,比較常用,最好和-XX:+UseParNewGC一同使用

  • -XX:+UseG1GC

  1. gc相關參數

  • -XX: +DisableExplicitGC:禁止使用System.gc

  • -XX:+PrintGCTimeStamps -XX:+PrintGCDetails Xloggc:<filename>打印gc回收的詳情日誌

  • -XX:+UseGCOverheadLimit:讓程序提前結束,達到預警目的

  • -XX:+UseCMSCompactAtFullCollection:對存活對象進行整理,使內存碎片減少


GC垃圾回收