亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Java垃圾回收調(diào)優(yōu)

系統(tǒng) 1849 0

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

一,要解決long pause time首先要了解JVM中heap的結(jié)構(gòu)


Java垃圾回收調(diào)優(yōu)

java gc heap

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

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

Java中有四種不同的回收算法,對(duì)應(yīng)的啟動(dòng)參數(shù)為
–XX:+UseSerialGC
–XX:+UseParallelGC
–XX:+UseParallelOldGC
–XX:+UseConcMarkSweepGC

1. Serial Collector
大部分平臺(tái)或者強(qiáng)制 java -client 默認(rèn)會(huì)使用這種。
young generation算法 = serial
old generation算法 = serial (mark-sweep-compact)
這種方法的缺點(diǎn)很明顯,stop-the-world, 速度慢。服務(wù)器應(yīng)用不推薦使用。

2. Parallel Collector
在linux x64上默認(rèn)是這種,其他平臺(tái)要加 java -server 參數(shù)才會(huì)默認(rèn)選用這種。
young = parallel,多個(gè)thread同時(shí)copy
old = mark-sweep-compact = 1
優(yōu)點(diǎn):新生代回收更快。因?yàn)橄到y(tǒng)大部分時(shí)間做的gc都是新生代的,這樣提高了throughput(cpu用于非gc時(shí)間)
缺點(diǎn):當(dāng)運(yùn)行在8G/16G server上old generation live object太多時(shí)候pause time過長(zhǎng)

3. Parallel Compact Collector (ParallelOld)
young = parallel = 2
old = parallel,分成多個(gè)獨(dú)立的單元,如果單元中l(wèi)ive object少則回收,多則跳過
優(yōu)點(diǎn):old old generation上性能較 parallel 方式有提高
缺點(diǎn):大部分server系統(tǒng)old generation內(nèi)存占用會(huì)達(dá)到60%-80%, 沒有那么多理想的單元live object很少方便迅速回收,同時(shí)compact方面開銷比起parallel并沒明顯減少。

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

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

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

?

原文鏈接: Java垃圾回收調(diào)優(yōu)

Java垃圾回收調(diào)優(yōu)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 草久在线播放 | 国产二级片 | 亚洲欧美一区二区三区不卡 | 中文日韩 | 在线观看日韩视频 | 久久r8这里只精品99re66 | 天天综合网天天综合色不卡 | 亚洲成人免费观看 | 欧美黄色网址 | 国产婷婷高清在线观看免费 | 99国产精品久久 | 91妖精视频| 久久色成人 | 91在线看视频 | 欧美性猛交xxxxx按摩欧美 | 亚洲精品三区 | 青草福利| 中文视频在线 | 日本在线看片网站 | 亚洲国产第一区二区香蕉 | 亚洲日本欧美日韩高观看 | 久久精品国产精品亚洲精品 | 亚洲成a人片在线观看精品 亚洲成a人一区二区三区 | 国产一级高清视频 | 美国毛片一级视频在线aa | 男人的午夜 | 四虎在线免费播放 | 伊人首页 | 国产在线观看一区精品 | 国产成人高清亚洲一区久久 | 99国产精品热久久久久久 | 日本一本在线观看 | 欧美日韩综合 | 91探花视频在线观看 | 又粗又大的机巴好爽7 | 亚洲在线观看一区 | 成人黄色网址 | 国产羞羞羞视频在线观看 | 亚洲精品在线免费 | 国产福利在线视频 | 久久国产自偷自免费一区100 |