首頁>Club>
JVM記憶體如何做到效能調優呢?目的是減少GC的頻率和Full GC的次數,過多的GC和Full GC是會佔用很多的系統資源(主要是CPU),影響系統的吞吐量
10
回覆列表
  • 1 # 自稱實戰派

    想要減少GC的頻率和Full GC的次數可以從以下幾方面著手:

    合理的設定新生代和老年代空間大小

    選擇合適的垃圾收集器避免記憶體洩漏

    下面來詳細說說這三個方面怎麼做。

    1、合理的設定新生代和老年代空間大小

    一般來說,按照老年代:新生代=2:1,新生代中的Eden:from=8:1來配置,可以滿足大多數場景下的要求。

    以一個4G記憶體的JVM為例,可以按照下面的引數來配置:

    -server-Xms4096m-Xmx4096m-XX:NewSize=1536m-XX:MaxNewSize=1536m-XX:PermSize=64m-XX:MaxPermSize=64m-XX:+UseConcMarkSweepGC-XX:+CMSClassUnloadingEnabled-XX:MaxTenuringThreshold=5

    2、選擇合適的垃圾收集器

    JVM中提供多種垃圾收集器,如果是後臺程式,追求垃圾回收佔用的時間比例儘可能小,推薦使用ParallelGC收集器,可用以下引數設定:

    -XX:+UseParallelGC

    如果是web應用,追求儘可能短的停頓時間,建議用ParNew+CMS收集器,可用以下引數來配置:

    -XX:+UseParNewGC-XX:+UseConcMarkSweepGC

    3、避免記憶體洩露

    如果程式中出現了記憶體洩漏,垃圾無法回收,不僅會頻繁出發GC,甚至會導致整個系統由於記憶體不足崩潰。

    如果程式中出現了頻繁GC,最好看下GC日誌和dump檔案,確認有沒有記憶體洩漏。如果有的話必須先解決洩露問題。

  • 中秋節和大豐收的關聯?
  • 曾經那個北大畢業去賣豬肉的已經50歲了,如今他在幹嘛?