欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Java垃圾回收調優

系統 1920 0

在Java中,通常通訊類型的服務器對GC(Garbage Collection)比較敏感。通常通訊服務器每秒需要處理大量進出的數據包,需要解析,分解成不同的業務邏輯對象并做相關的業務處理,這樣會導致大量 的臨時對象被創建和回收。同時服務器如果需要同時保存用戶狀態的話,又會產生很多永久的對象,比如用戶session。業務越復雜的應用往往用戶 session包含的引用對象就越多。這樣在極端情況下會發生兩件事情,long gc pause time 或 out of memory。

一,要解決long pause time首先要了解JVM中heap的結構


Java垃圾回收調優

java gc heap

  • Java Heap為什么要分成幾個不同的代(generation)? 由于80%-98%的對象的生存周期很短,大部分新對象存放在young generation可以很高效的回收,避免遍歷所有對象。
  • young與old中內存分配的算法完全不同。young generation中由于存活的很少,要mark, sweep 然后再 compact 剩余的對象比較耗時,干脆把 live object copy 到另外一個空間更高效。old generation完全相反,里面的 live object 變化較少。因此采用 mark-sweep-compact更合適。

二,Java中四種垃圾回收算法

Java中有四種不同的回收算法,對應的啟動參數為
–XX:+UseSerialGC
–XX:+UseParallelGC
–XX:+UseParallelOldGC
–XX:+UseConcMarkSweepGC

1. Serial Collector
大部分平臺或者強制 java -client 默認會使用這種。
young generation算法 = serial
old generation算法 = serial (mark-sweep-compact)
這種方法的缺點很明顯,stop-the-world, 速度慢。服務器應用不推薦使用。

2. Parallel Collector
在linux x64上默認是這種,其他平臺要加 java -server 參數才會默認選用這種。
young = parallel,多個thread同時copy
old = mark-sweep-compact = 1
優點:新生代回收更快。因為系統大部分時間做的gc都是新生代的,這樣提高了throughput(cpu用于非gc時間)
缺點:當運行在8G/16G server上old generation live object太多時候pause time過長

3. Parallel Compact Collector (ParallelOld)
young = parallel = 2
old = parallel,分成多個獨立的單元,如果單元中live object少則回收,多則跳過
優點:old old generation上性能較 parallel 方式有提高
缺點:大部分server系統old generation內存占用會達到60%-80%, 沒有那么多理想的單元live object很少方便迅速回收,同時compact方面開銷比起parallel并沒明顯減少。

4. Concurent Mark-Sweep(CMS) Collector
young generation = parallel collector = 2
old = cms
同時不做 compact 操作。
優點:pause time會降低, pause敏感但CPU有空閑的場景需要建議使用策略4.
缺點:cpu占用過多,cpu密集型服務器不適合。另外碎片太多,每個object的存儲都要通過鏈表連續跳n個地方,空間浪費問題也會增大。

幾條經驗:
1. java -server
2. 設置Xms=Xmx=3/4物理內存
3. 如果是CPU密集型服務器,使用–XX:+UseParallelOldGC, 否則–XX:+UseConcMarkSweepGC
4. 新生代,Parallel/ParallelOld可設大于Xmx1/4,CMS可設小,小于Xmx1/4
5. 優化程序,特別是每個用戶的session中的集合類等。我們的一個模塊中session中曾經為每個用戶使用了一個ConcurrentHashMap, 里面通常只有幾條記錄,后來改成數組之后,每臺機大概節約了1~2G內存。

不過總的說來,Java的GC算法感覺是業界最成熟的,目前很多其他語言或者框架也都支持GC了,但大多數都是只達到Java Serial gc這種層面,甚至分generation都未考慮。JDK7里面針對CMS又進行了一種改進,會采用一種G1(Garbage-First Garbage Collection)的算法。實際上 Garbage-First paper (PDF) 2004年已經出來了,相信到JDK7已經可以用于嚴格生產環境,有時間也會進一步介紹一下G1。
另外在今年的Sun Tech Days上 Joey Shen 講的 Improving Java Performance (PDF)也是一個很好的Java GC調優的入門教程。

?

原文鏈接: Java垃圾回收調優

Java垃圾回收調優


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 福利在线免费 | 亚洲一区二区三区高清 | 一级毛片日本特黄97人人 | 国产成人久久蜜一区二区 | 亚洲码欧美码一区二区三区 | 色噜噜狠狠狠狠色综合久不 | 亚洲一视频 | av黄色在线 | 中国一级大黄大黄大色毛片 | 午夜视频在线观看免费观看在线观看 | 国产高清在线91福利 | 久久久九九精品国产毛片A片 | 小明天天看 | 亚洲国产二区 | 亚洲AV无码色情第一综合网 | 妞干网av | 青青草在线视频免费观看 | av电影网站在线观看 | 久久夜夜| 亚洲男人的天堂久久精品 | 日本欧美一区二区三区视频麻豆 | 加勒比久久综合 | 看个毛片| 国产福利在线看 | 2级毛片| 国产超级乱淫视频播放 | 日本天堂网址 | 欧美综合国产精品久久丁香 | 日韩福利视频导航 | 国产一级在线观看视频 | 斗罗破苍穹在线观看免费完整观看 | 国产91在线 | 亚洲 | 偷偷狠狠的日日2020 | 性夜影院爽黄a爽免费视 | 日韩黄色一级视频 | 久久久精品久久视频只有精品 | 久久在线 | 日韩在线视频一区 | 久久亚洲精品中文字幕二区 | 激情福利视频 | 天天操天天干天天爽 |