熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

經驗分享 JVM調優方法總結

2013-11-23 18:50:53  來源: Java核心技術 
    你對JVM調優是否熟悉這裡向大家描述一下首先要了解幾個概念比如說Perm持久代用於存放靜態文件如今Java類方法等持久代對垃圾回收沒有顯著影響但是有些應用可能動態生成或者調用一些class例如Hibernate等
   
    JVM調優總結
   
    Young(年輕代)
   
    年輕代分三個區一個Eden區兩個Survivor區大部分對象在Eden區中生成當Eden區滿時還存活的對象將被復制到Survivor區(兩個中的一個)當這個Survivor區滿時此區的存活對象將被復制到另外一個Survivor區當這個Survivor去也滿了的時候從第一個Survivor區復制過來的並且此時還存活的對象將被復制年老區(Tenured)需要注意Survivor的兩個區是對稱的沒先後關系所以同一個區中可能同時存在從Eden復制過來對象和從前一個Survivor復制過來的對象而復制到年老區的只有從第一個Survivor去過來的對象而且Survivor區總有一個是空的
   
    Tenured(年老代)
   
    年老代存放從年輕代存活的對象一般來說年老代存放的都是生命期較長的對象
   
    Perm(持久代)
   
    用於存放靜態文件如今Java類方法等持久代對垃圾回收沒有顯著影響但是有些應用可能動態生成或者調用一些class例如Hibernate等在這種時候需要設置一個比較大的持久代空間來存放這些運行過程中新增的類持久代大小通過XX:MaxPermSize=<N>進行設置
   
    JVM調優之年輕代大小選擇
   
    ◆響應時間優先的應用盡可能設大直到接近系統的最低響應時間限制(根據實際情況選擇)在此種情況下年輕代收集發生的頻率也是最小的同時減少到達年老代的對象
   
    ◆吞吐量優先的應用盡可能的設置大可能到達Gbit的程度因為對響應時間沒有要求垃圾收集可以並行進行一般適合CPU以上的應用
   
    JVM調優之年老代大小選擇
   
    ◆響應時間優先的應用年老代使用並發收集器所以其大小需要小心設置一般要考慮並發會話率和會話持續時間等一些參數如果堆設置小了可以會造成內存碎片高回收頻率以及應用暫停而使用傳統的標記清除方式如果堆大了則需要較長的收集時間最優化的方案一般需要參考以下數據獲得
   
    並發垃圾收集信息
   
    持久代並發收集次數
   
    傳統GC信息
   
    花在年輕代和年老代回收上的時間比例
   
    減少年輕代和年老代花費的時間一般會提高應用的效率
   
    ◆吞吐量優先的應用一般吞吐量優先的應用都有一個很大的年輕代和一個較小的年老代原因是這樣可以盡可能回收掉大部分短期對象減少中期的對象而年老代盡存放長期存活對象
   
    JVM調優之較小堆引起的碎片問題
   
    因為年老代的並發收集器使用標記清除算法所以不會對堆進行壓縮當收集器回收時他會把相鄰的空間進行合並這樣可以分配給較大的對象但是當堆空間較小時運行一段時間以後就會出現碎片如果並發收集器找不到足夠的空間那麼並發收集器將會停止然後使用傳統的標記清除方式進行回收如果出現碎片可能需要進行如下配置
   
    ◆XX:+UseCMSCompactAtFullCollection:使用並發收集器時開啟對年老代的壓縮
   
    ◆XX:CMSFullGCsBeforeCompaction=:上面配置開啟的情況下這裡設置多少次FullGC後對年老代進行壓縮
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25855.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.