<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 110, comments - 101, trackbacks - 0, articles - 7
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
    轉自:http://blog.csdn.net/jeffreynicole/article/details/46953059 


    一個性能較好的web服務器jvm參數配置:


    1. -server //服務器模式  
    2. -Xmx2g //JVM最大允許分配的堆內存,按需分配  
    3. -Xms2g //JVM初始分配的堆內存,一般和Xmx配置成一樣以避免每次gc后JVM重新分配內存。  
    4. -Xmn256m //年輕代內存大小,整個JVM內存=年輕代 + 年老代 + 持久代  
    5. -XX:PermSize=128m //持久代內存大小  
    6. -Xss256k //設置每個線程的堆棧大小  
    7. -XX:+DisableExplicitGC //忽略手動調用GC, System.gc()的調用就會變成一個空調用,完全不觸發GC  
    8. -XX:+UseConcMarkSweepGC //并發標記清除(CMS)收集器  
    9. -XX:+CMSParallelRemarkEnabled //降低標記停頓  
    10. -XX:+UseCMSCompactAtFullCollection //在FULL GC的時候對年老代的壓縮  
    11. -XX:LargePageSizeInBytes=128m //內存頁的大小  
    12. -XX:+UseFastAccessorMethods //原始類型的快速優化  
    13. -XX:+UseCMSInitiatingOccupancyOnly //使用手動定義初始化定義開始CMS收集  
    14. -XX:CMSInitiatingOccupancyFraction=70 //使用cms作為垃圾回收使用70%后開始CMS收集  


    說明:

    -Xmn和-Xmx之比大概是1:9,如果把新生代內存設置得太大會導致young gc時間較長

    一個好的Web系統應該是每次http請求申請內存都能在young gc回收掉,full gc永不發生,當然這是最理想的情況

    xmn的值應該是保證夠用(夠http并發請求之用)的前提下設置得盡量小

    web服務器和游戲服務器的配置思路不太一樣,最重要的區別是對游戲服務器的xmn即年輕代設置比較大,和Xmx大概1:3的關系,因為游戲服務器一般是長連接,在保持一定的并發量后需要較大的年輕代堆內存,如果設置得大小了會經常引發young gc


    • 對JVM的簡介


    由上圖可以看出jvm堆內存的分類情況,JVM內存被分成多個獨立的部分。
    廣泛地說,JVM堆內存被分為兩部分——年輕代(Young Generation)和老年代(Old Generation)。


    • 年輕代
    年輕代是所有新對象產生的地方。當年輕代內存空間被用完時,就會觸發垃圾回收。這個垃圾回收叫做Minor GC。年輕代被分為3個部分——Enden區和兩個Survivor區。


    年輕代空間的要點:
    大多數新建的對象都位于Eden區。
    當Eden區被對象填滿時,就會執行Minor GC。并把所有存活下來的對象轉移到其中一個survivor區。
    Minor GC同樣會檢查存活下來的對象,并把它們轉移到另一個survivor區。這樣在一段時間內,總會有一個空的survivor區。
    經過多次GC周期后,仍然存活下來的對象會被轉移到年老代內存空間。通常這是在年輕代有資格提升到年老代前通過設定年齡閾值來完成的。

    • 年老代
    年老代內存里包含了長期存活的對象和經過多次Minor GC后依然存活下來的對象。通常會在老年代內存被占滿時進行垃圾回收。老年代的垃圾收集叫做Major GC。Major GC會花費更多的時間。


    Stop the World事件
    所有的垃圾收集都是“Stop the World”事件,因為所有的應用線程都會停下來直到操作完成(所以叫“Stop the World”)。

    因為年輕代里的對象都是一些臨時(short-lived )對象,執行Minor GC非???,所以應用不會受到(“Stop the World”)影響。

    由于Major GC會檢查所有存活的對象,因此會花費更長的時間。應該盡量減少Major GC。因為Major GC會在垃圾回收期間讓你的應用反應遲鈍,所以如果你有一個需要快速響應的應用發生多次Major GC,你會看到超時錯誤。

    垃圾回收時間取決于垃圾回收策略。這就是為什么有必要去監控垃圾收集和對垃圾收集進行調優。從而避免要求快速響應的應用出現超時錯誤。


    • 永久代
    永久代或者“Perm Gen”包含了JVM需要的應用元數據,這些元數據描述了在應用里使用的類和方法。注意,永久代不是Java堆內存的一部分。
    永久代存放JVM運行時使用的類。永久代同樣包含了Java SE庫的類和方法。永久代的對象在full GC時進行垃圾收集。


    方法區
    方法區是永久代空間的一部分,并用來存儲類型信息(運行時常量和靜態變量)和方法代碼和構造函數代碼。


    內存池
    如果JVM實現支持,JVM內存管理會為創建內存池,用來為不變對象創建對象池。字符串池就是內存池類型的一個很好的例子。內存池可以屬于堆或者永久代,這取決于JVM內存管理的實現。


    運行時常量池
    運行時常量池是每個類常量池的運行時代表。它包含了類的運行時常量和靜態方法。運行時常量池是方法區的一部分。


    Java棧內存
    Java棧內存用于運行線程。它們包含了方法里的臨時數據、堆里其它對象引用的特定數據。

    Java垃圾回收
    Java垃圾回收會找出沒用的對象,把它從內存中移除并釋放出內存給以后創建的對象使用。Java程序語言中的一個最大優點是自動垃圾回收,不像其他的程序語言那樣需要手動分配和釋放內存,比如C語言。

    垃圾收集器是一個后臺運行程序。它管理著內存中的所有對象并找出沒被引用的對象。所有的這些未引用的對象都會被刪除,回收它們的空間并分配給其他對象。

    一個基本的垃圾回收過程涉及三個步驟:
    標記:這是第一步。在這一步,垃圾收集器會找出哪些對象正在使用和哪些對象不在使用。
    正常清除:垃圾收集器清會除不在使用的對象,回收它們的空間分配給其他對象。
    壓縮清除:為了提升性能,壓縮清除會在刪除沒用的對象后,把所有存活的對象移到一起。這樣可以提高分配新對象的效率。


    簡單標記和清除方法存在兩個問題:
    效率很低。因為大多數新建對象都會成為“沒用對象”。
    經過多次垃圾回收周期的對象很有可能在以后的周期也會存活下來。
    上面簡單清除方法的問題在于Java垃圾收集的分代回收的,而且在堆內存里有年輕代和年老代兩個區域。


    • Java垃圾回收類型
    這里有五種可以在應用里使用的垃圾回收類型。

    僅需要使用JVM開關就可以在我們的應用里啟用垃圾回收策略。

    Serial GC(-XX:+UseSerialGC):Serial GC使用簡單的標記、清除、壓縮方法對年輕代和年老代進行垃圾回收,即Minor GC和Major GC。Serial GC在client模式(客戶端模式)很有用,比如在簡單的獨立應用和CPU配置較低的機器。這個模式對占有內存較少的應用很管用。
    Parallel GC(-XX:+UseParallelGC):除了會產生N個線程來進行年輕代的垃圾收集外,Parallel GC和Serial GC幾乎一樣。這里的N是系統CPU的核數。我們可以使用 -XX:ParallelGCThreads=n 這個JVM選項來控制線程數量。并行垃圾收集器也叫throughput收集器。因為它使用了多CPU加快垃圾回收性能。Parallel GC在進行年老代垃圾收集時使用單線程。
    Parallel Old GC(-XX:+UseParallelOldGC):和Parallel GC一樣。不同之處,Parallel Old GC在年輕代垃圾收集和年老代垃圾回收時都使用多線程收集。
    并發標記清除(CMS)收集器(-XX:+UseConcMarkSweepGC):CMS收集器也被稱為短暫停頓并發收集器。它是對年老代進行垃圾收集的。CMS收集器通過多線程并發進行垃圾回收,盡量減少垃圾收集造成的停頓。CMS收集器對年輕代進行垃圾回收使用的算法和Parallel收集器一樣。這個垃圾收集器適用于不能忍受長時間停頓要求快速響應的應用??墒褂?-XX:ParallelCMSThreads=n JVM選項來限制CMS收集器的線程數量。
    G1垃圾收集器(-XX:+UseG1GC) G1(Garbage First):垃圾收集器是在Java 7后才可以使用的特性,它的長遠目標時代替CMS收集器。G1收集器是一個并行的、并發的和增量式壓縮短暫停頓的垃圾收集器。G1收集器和其他的收集器運行方式不一樣,不區分年輕代和年老代空間。它把堆空間劃分為多個大小相等的區域。當進行垃圾收集時,它會優先收集存活對象較少的區域,因此叫“Garbage First”。


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


    網站導航:
     
    主站蜘蛛池模板: 欧美亚洲精品一区二区| 亚洲中文字幕久久精品无码A| 免费一级毛suv好看的国产网站| 成人在线视频免费| 亚洲日韩中文字幕无码一区| 无码高潮少妇毛多水多水免费| 亚洲AV无码一区二区三区在线| 成人女人A级毛片免费软件| 中文字幕亚洲男人的天堂网络| 国产精品久久久久免费a∨| 亚洲kkk4444在线观看| 免费无码看av的网站| 九九精品国产亚洲AV日韩| 国产大片91精品免费看3| 国产成人亚洲精品蜜芽影院| 亚洲成a人片在线观看久| 一级女性全黄久久生活片免费| 久久久久无码专区亚洲av| 中国一级毛片免费看视频| 亚洲国产精品高清久久久| 久久精品乱子伦免费| 亚洲精品美女久久久久9999| 亚洲免费综合色在线视频| 亚洲aⅴ无码专区在线观看春色| 在线观看国产情趣免费视频| 一区二区三区在线免费观看视频| 亚洲小说区图片区另类春色| 日韩精品人妻系列无码专区免费| 亚洲av乱码一区二区三区香蕉| 精品免费国产一区二区| h在线看免费视频网站男男| 亚洲国产精品第一区二区| 最近中文字幕mv手机免费高清 | 一级看片免费视频| 精品亚洲综合在线第一区| 免费阿v网站在线观看g| 免费人成大片在线观看播放电影| 亚洲gv猛男gv无码男同短文| 黄色成人网站免费无码av| 久久高潮一级毛片免费| 亚洲已满18点击进入在线观看|