jvm調(diào)優(yōu)總結(jié)(8):反思-java開發(fā)java經(jīng)驗(yàn)技巧

jvm調(diào)優(yōu)總結(jié)(8):反思-java開發(fā)java經(jīng)驗(yàn)技巧

ID:31317183

大?。?1.50 KB

頁數(shù):4頁

時間:2019-01-08

jvm調(diào)優(yōu)總結(jié)(8):反思-java開發(fā)java經(jīng)驗(yàn)技巧_第1頁
jvm調(diào)優(yōu)總結(jié)(8):反思-java開發(fā)java經(jīng)驗(yàn)技巧_第2頁
jvm調(diào)優(yōu)總結(jié)(8):反思-java開發(fā)java經(jīng)驗(yàn)技巧_第3頁
jvm調(diào)優(yōu)總結(jié)(8):反思-java開發(fā)java經(jīng)驗(yàn)技巧_第4頁
資源描述:

《jvm調(diào)優(yōu)總結(jié)(8):反思-java開發(fā)java經(jīng)驗(yàn)技巧》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、JVM調(diào)優(yōu)總結(jié)(8):反思-編程開發(fā)技術(shù)JVM調(diào)優(yōu)總結(jié)(8):反思原文出處:pengjiaheng垃圾回收的悖論所謂“成也蕭何敗蕭何”。Java的垃圾回收確實(shí)帶來了很多好處,為開發(fā)帶來了便利。但是在一些高性能、高并發(fā)的情況下,垃圾冋收確成為了制約Java應(yīng)用的瓶頸。目前JDK的垃圾回收算法,始終無法解決垃圾回收時的暫停問題,兇為這個暫停嚴(yán)重影響了程序的相應(yīng)時間,造成擁塞或堆積。這也是后續(xù)JDK增加G1算法的一?個重要原因。當(dāng)然,上而是從技術(shù)角度出發(fā)解決垃圾回收帶來的問題,但是從系統(tǒng)設(shè)計(jì)方而我們就需要問一

2、下了:????我們需要分配如此大的內(nèi)存空間給應(yīng)用嗎????我們是否能夠通過有效使用內(nèi)存而不是通過擴(kuò)大內(nèi)存的方式來設(shè)計(jì)我們的系統(tǒng)呢????我們的內(nèi)存中都放了什么內(nèi)存中需要放什么呢?個人認(rèn)為,內(nèi)存中需要放的是你的應(yīng)用需要在不久的將來再次用到到的東西。想想看,如杲你在將來不用這些東西,何必放內(nèi)存呢?放文件、數(shù)據(jù)庫不是更好?這些東西一般包括:1.系統(tǒng)運(yùn)行時業(yè)務(wù)相關(guān)的數(shù)據(jù)。比如web應(yīng)用中的session、即時消息的session等。這些數(shù)據(jù)-?般在一個用戶訪問周期或者一個使用過程中都需要存在。2.緩存。緩存就比

3、較多了,你所要快速訪問的都可以放這里面。其實(shí)上而的業(yè)務(wù)數(shù)據(jù)也可以理解為一種緩存。3.?線程。因此我們是不是可以這么認(rèn)為,如果我們不把業(yè)務(wù)數(shù)據(jù)和緩存放在JVM中,或者把他們獨(dú)立出來,那么Java應(yīng)用使用時所需的內(nèi)存將會大大減少,同時垃圾回收時間也會相應(yīng)減少。我認(rèn)為這是可能的。解決之道數(shù)據(jù)庫、文件系統(tǒng)把所有數(shù)據(jù)都放入數(shù)據(jù)庫或者文件系統(tǒng),這是一種最為簡單的方式。在這種方式下,Java應(yīng)用的內(nèi)存基本上等于處理一次峰值并發(fā)請求所需的內(nèi)存。數(shù)據(jù)的獲取都在每次請求時從數(shù)據(jù)庫和文件系統(tǒng)中獲取。也可以理解為,一次業(yè)務(wù)訪問

4、以后,所冇對彖都可以進(jìn)行回收了。這是一種內(nèi)存使用最有效的方式,但是從應(yīng)用角度來說,這種方式很低效。內(nèi)存-硬盤映射上面的問題是因?yàn)槲覀兪褂昧宋募到y(tǒng)帶來了低效。但是如果我們不是讀寫硬盤,而是寫內(nèi)存的話效率將會提高很多。數(shù)據(jù)庫和文件系統(tǒng)都是實(shí)實(shí)在在進(jìn)行了持久化,但是當(dāng)我們并不需要這樣持久化的時候,我們可以做一些變通一一把內(nèi)存當(dāng)碩盤使。內(nèi)存-硬盤映射很好很強(qiáng)大,既用了緩存又對Java應(yīng)用的內(nèi)存使用又沒有影響。Java應(yīng)用還是Java應(yīng)用,他只知道讀坊的還是文件,但是實(shí)際上是內(nèi)存。這種方式兼得的Java應(yīng)用與緩

5、存兩方面的好處。memcached的廣泛使用也止是這一類的代表。同一機(jī)器部署多個JVM這也是一種很好的方式,可以分為縱拆和橫拆??v拆可以理解為把Java應(yīng)用劃分為不同模塊,各個模塊使用一個獨(dú)立的Java進(jìn)程。而橫拆則是同樣功能的應(yīng)用部署多個JVM。通過部署多個JVM,可以把每個JVM的內(nèi)存控制一個垃圾回收可以忍受的范圍內(nèi)即可。但是這相當(dāng)于進(jìn)行了分布式的處理,其額外帶來的復(fù)雜性也是需要評估的。另外,也有支持分布式的這種JVM可以考慮,不要要錢哦:)程序控制的對象生命周期這種方式是理想當(dāng)小的方式,口前的虛擬

6、機(jī)述沒有,純屬假設(shè)。即:考慮由編程方式配置哪些對象在垃圾收集過程屮可以直接跳過,減少垃圾回收線程遍歷標(biāo)記的時間。這種方式相當(dāng)于在編程的吋候告訴虛擬機(jī)某些對象你可以在和寸間后在進(jìn)行收集或者由代碼標(biāo)識可以收集了(類似C、C++),在這之前你即便去遍歷他也是沒有效果的,他肯定是還在被引用的。這種方式如果JVM可以實(shí)現(xiàn),個人認(rèn)為將是一個飛躍,Java即冇了垃圾回收的優(yōu)勢,乂有了C、C++對內(nèi)存的可控性。線程分配Java的阻塞式的線程模型基木上可以拋棄了,口前成熟的NIO框架也比較多了。阻塞式TO帶來的問題是線程

7、數(shù)量的線性増長,而NTO則可以轉(zhuǎn)換成為常數(shù)線程。因此,對于服務(wù)端的應(yīng)用而言,NI0還是唯一選擇。不過,JDK7中為我們帶來的A10是否能讓人眼前一亮呢?我們拭目以待。其他的JDK木文說的都是Sim的JDK,目前常見的JDK還有JRocket和IBM的JDK。其中JRocket在10方面比Sun的高很多,不過SunJDK6.0以后提高也很大。而且JRocket在垃圾回收方而,也具有優(yōu)勢,其可設(shè)置垃圾回收的最大暫停時間也是很吸引人的。不過,系統(tǒng)Sun的G1實(shí)現(xiàn)以后,在這方面會有一個質(zhì)的飛躍。參考資料能整理出

8、上面一些東西,也是因?yàn)檎驹诰奕说募缟?。下面是一些參考資料,供大家學(xué)習(xí),大家有更好的,可以繼續(xù)完善:)??Java理論與實(shí)踐:垃圾收集簡史??JavaSE6HotSpot[tm]VirtualMachineGarbageCollectionTuning??ImprovingJavaApplicationPerformaneeandScalabilitybyReducingGarbageCol1ectionTimesandSizingMemor

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。