日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > 綜合技術(shù) > JVM性能調(diào)優(yōu)1:JVM性能調(diào)優(yōu)理論及實踐(收集整理)

JVM性能調(diào)優(yōu)1:JVM性能調(diào)優(yōu)理論及實踐(收集整理)

來源:程序員人生   發(fā)布時間:2016-06-06 08:00:55 閱讀次數(shù):2811次
本系列包括:
JVM性能調(diào)優(yōu)1:JVM性能調(diào)優(yōu)理論及實踐(搜集整理)
JVM性能調(diào)優(yōu)2:JVM性能調(diào)優(yōu)參數(shù)整理
JVM性能調(diào)優(yōu)3:JVM_堆溢出分析進(jìn)程和命令
JVm性能調(diào)優(yōu)4:GC日志分析
JVM性能調(diào)優(yōu)5:Heap堆分析方法


注:本文部份內(nèi)容搜集整理了網(wǎng)上的資料。

1.      內(nèi)存結(jié)構(gòu)


1.1.     分代結(jié)構(gòu)圖


注意:


JVM中,非堆內(nèi)存,根據(jù)模式不同分為不同的幾個部份。


-Server下:非堆包括:持久代和代碼緩存(Code cache


-client下:非堆包括:持久代、代碼緩存(Code cache)、Perm rwperm ro。


2.      性能指標(biāo)


對垃圾搜集的性能,主要有兩個指標(biāo)。


吞吐量throughput)指用來進(jìn)行垃圾搜集以外工作所用的時間占總時間的百分比,1般要通太長時間的視察和丈量。吞吐量包括了分配內(nèi)存所花費的時間在內(nèi)(1般來講無需對分配進(jìn)行調(diào)優(yōu))。


Throughput is the percentage of total time not spent in garbage collection,considered over long periods of time. Throughput includes time spent inallocation (but tuning for speed of allocation is generally not needed.) fromTuning GC with jdk 1.5


暫停Pause)指由于進(jìn)行垃圾搜集而致使利用沒法響應(yīng)的時間。


Pauses are the times when an application appears unresponsive becausegarbage collection is occurring.


Footprint is the working set of a process, measured in pages and cachelines. On systems with limited physical memory or many processes, footprint maydictate scalability.      Promptnessis the time between when an object becomes dead and when the memory becomesavailable, an important consideration for distributed systems, including remotemethod invocation (RMI). fromTuning GC with jdk 1.5


用戶對垃圾搜集有不同的需求,例如,對Web服務(wù)器利用來講,吞吐量是要側(cè)重斟酌的,而暫停時間可能由于網(wǎng)絡(luò)的反應(yīng)時間而不那末明顯;而對1個交互式圖形界面的利用來講,即便是短暫的暫停都會帶來非常不好的用戶體驗。


In general, aparticular generation sizing chooses a trade-off between these considerations.For example, a very largeyoung generation may maximize throughput,but does so at the expense of footprint, promptness, and pause times.younggeneration pauses can be minimized by using a smallyoung generationat the expense of throughput. To a first approximation, the sizing of onegeneration does not affect the collection frequency and pause times for anothergeneration .fromTuning GC with jdk 1.5


通常來講,如何設(shè)置代的大小是在這些斟酌因素之間作出的1個權(quán)衡。例如,將新生代設(shè)置得很大會得到很好的吞吐性能,但是會增加暫停時間;反之,較小的新生代設(shè)置會減小暫停時間,但是下降了吞吐量。


1個代的大小不應(yīng)當(dāng)影響在其他代上進(jìn)行垃圾搜集的頻率和暫停時間。


3.      援用類型


對象援用類型分為強援用、軟援用、弱援用和虛援用


3.1.     強援用


就是我們1般聲明對象是時虛擬機生成的援用,強援用環(huán)境下,垃圾回收時需要嚴(yán)格判斷當(dāng)前對象是不是被強援用,如果被強援用,則不會被垃圾回收。


3.2.     軟援用


軟援用1般被做為緩存來使用。與強援用的區(qū)分是,軟援用在垃圾回收時,虛擬機會根據(jù)當(dāng)前系統(tǒng)的剩余內(nèi)存來決定是不是對軟援用進(jìn)行回收。如果剩余內(nèi)存比較緊張,則虛擬機會回收軟援用所援用的空間;如果剩余內(nèi)存相對富裕,則不會進(jìn)行回收。換句話說,虛擬機在產(chǎn)生OutOfMemory時,肯定是沒有軟援用存在的。


3.3.     弱援用


弱援用與軟援用類似,都是作為緩存來使用。但與軟援用不同,弱援用在進(jìn)行垃圾回收時,是1定會被回收掉的,因此其生命周期只存在于1個垃圾回收周期內(nèi)。


3.4.     虛援用


 


4.      內(nèi)存分配回收次序


新生代是類的誕生、成長、滅亡的區(qū)域,1個類在這里產(chǎn)生,利用,最后被垃圾回收器搜集,結(jié)束生命。


新生區(qū)又分為兩部份:伊甸區(qū)(Eden space)和幸存者區(qū)(Survivorpace),所有的類都是在endennew出來的。幸存區(qū)有兩個: 0區(qū)(Survivor 0 space)和1區(qū)(Survivor 1 space)。


當(dāng)Eden的空間用完時,程序又需要創(chuàng)建對象,JVM的垃圾回收器將對enden區(qū)進(jìn)行垃圾回收,將enden區(qū)中的不再被其他對象所援用的對象進(jìn)行燒毀(次搜集)。


然后將伊甸園中的剩余對象移動到幸存0區(qū)。若幸存0區(qū)也滿了,再對該區(qū)進(jìn)行垃圾回收(次搜集),然后移動到1區(qū)。那如果1區(qū)也滿了呢?(次搜集)


再移動到養(yǎng)老區(qū)。


 



新生代采取復(fù)制算法,old區(qū)采取標(biāo)記清除算法。


不管是復(fù)制算法還是標(biāo)記清除算法,在垃圾搜集期間都要暫??蛻舻睦贸绦颍?/span>cms垃圾搜集器除外,它在初始標(biāo)記和重新標(biāo)記時暫停,并發(fā)標(biāo)記和并發(fā)清除時,客戶線程不暫停)。


不管是復(fù)制算法還是標(biāo)記清除算法,在最開始,倒要標(biāo)記活動的對象,即對象的可達(dá)性分析,在這里,必須要求對象是1致的(便可達(dá)性分析期間,內(nèi)存狀態(tài)是凍結(jié)的);在cms搜集器是,在初始標(biāo)記(對root對象標(biāo)記時,要求凍結(jié))凍結(jié),但此時會產(chǎn)生浮動垃圾,即在并發(fā)標(biāo)記時,由分配了新的對象(由于沒有凍結(jié))。


綜述,基本進(jìn)程是,復(fù)制算法:標(biāo)記(暫停)-->復(fù)制(暫停,因?qū)ο蟮刂樊a(chǎn)生變化);標(biāo)記清除整理算法:標(biāo)記(暫停)-->清除整理(消除碎片,暫停,因?qū)ο蟮刂樊a(chǎn)生變化)。


root對象標(biāo)記很快,對內(nèi)存掃描分析,可達(dá)性分析進(jìn)程很慢。清除很慢(內(nèi)存回收),內(nèi)存整理、復(fù)制(慢)。


內(nèi)存分配需要時間。


5.      對象標(biāo)記算法(Object Marking Algorithms


5.1.     援用計數(shù)法(ReferenceCounting


堆中每個對象都有1個援用計數(shù)。當(dāng)新創(chuàng)建1個對象,或有變量被賦值為這個對象的援用,則這個對象的援用計數(shù)加1;當(dāng)1個對象的援用超過生存期或被設(shè)置1個新的值時,這個對象的援用計數(shù)減1。當(dāng)對象的援用計數(shù)變成0時,就能夠被當(dāng)作垃圾搜集。


這類方法的好處是垃圾搜集較快,適用于實時環(huán)境。缺點是這類方法沒法監(jiān)測出循環(huán)援用。例如對象A援用對象B,對象B也援用對象A,則這兩個對象可能沒法被垃圾搜集器搜集。因此這類方法是垃圾搜集的初期策略,現(xiàn)在很少使用。


5.2.     根搜索算法(Garbage Collection Roots Tracing


5.2.1.    基本思想


這類方法把每一個對象看做圖中1個節(jié)點,對象之間的援用關(guān)系為圖中各節(jié)點的鄰接關(guān)系。垃圾搜集器從1個或數(shù)個根結(jié)點遍歷對象圖,如果有些對象節(jié)點永久沒法到達(dá),則這個對象可以被當(dāng)作垃圾回收。


容易發(fā)現(xiàn),這類方法可以檢測出循環(huán)援用,避免了援用計數(shù)法的缺點,較為經(jīng)常使用。步驟以下:


  1. 選定1些對象,作為 GC Roots,組成基對象集;

  2. 由基對象集內(nèi)的對象動身,搜索所有可達(dá)的對象;

  3. 其余的不可達(dá)的對象,就是可以被回收的對象。

    這里的可達(dá)不可達(dá)與圖論中的定義1樣,所有的對象被看作點,援用被看作有向連接,全部援用關(guān)系就是1個有向圖。在援用計數(shù)法中提到的循環(huán)援用,其實就是有向圖中有環(huán)的情況,即構(gòu)成有向有環(huán)圖。援用計數(shù)法不適用于有向有環(huán)圖,而根搜索算法適用于所有有向圖,包括有環(huán)的和無環(huán)的。


5.2.2.    GCRoots


如果你的邏輯思惟夠清晰,你會說1定與選取基對象集的方法有關(guān)。是的,沒錯。選取 GC Roots 組成基對象集,其實就是選取以下這些對象:


《深入理解 Java 虛擬機:JVM高級特性與最好實踐》1書中提到的 GC Roots 為:


1.     方法區(qū)(Method Area,即 Non-Heap)中的類的 static 成員援用的對象,和 final成員援用的對象;


2.     Java方法棧(Java Method Stack)的局部變量表(Local Variable Table)中援用的對象;


3.     原生方法棧(Native Method Stack)中 JNI中援用的對象。


但明顯不夠全面,[參考2]中提到的要更全面:(March 6th,2012 update


1.     由系統(tǒng)類加載器加載的類相應(yīng)的對象:這些類永久不會被卸載,且這些類創(chuàng)建的對象都是 static 的。注意用戶使用的類加載器加載的類創(chuàng)建的對象,不屬于 GC Roots,除非是 java.lang.Class 的相應(yīng)實例有可能會稱為其他類的 GC Roots


2.     正在運行的線程。


3.     Java方法棧(Java Method Stack)的局部變量表(Local Variable Table)中援用的對象。


4.     原生方法棧(Native Method Stack)的局部變量表(Local Variable Table)中援用的對象。


5.     JNI中援用的對象。


6.     同步監(jiān)控器使用的對象。


7.      JVM GC控制的對象:這些對象是用于 JVM內(nèi)部的,是實現(xiàn)相干的。1般情況下,可能包括系統(tǒng)類加載器(注意與“1”不1樣,“1”中是 objects created by the classes loaded bysystem class loaders,這里是 theobjects, corresponding instances of system class loaders)、JVM內(nèi)部的1些重要的異常類的對象、異常句柄的預(yù)分配對象和在類加載進(jìn)程中自定義的類加載器。不幸的是,JVM其實不提供這些對象的任何額外的詳細(xì)信息。因此這些實現(xiàn)相干的內(nèi)容,需要依托分析來判定。


所以這個算法實行起來有兩部份,第1部份就是到 JVM 的幾個內(nèi)存區(qū)域中找對象,第2部份就是應(yīng)用圖論算法


 


 


 


 


6.      垃圾回收算法


6.1.     標(biāo)記-清除(Mark-Sweep



此算法履行分兩階段。第1階段從援用根節(jié)點開始標(biāo)記所有被援用的對象,第2階段遍歷全部堆,把未標(biāo)記的對象清除。此算法需要暫停全部利用,同時,會產(chǎn)生內(nèi)存碎片。


6.2.     標(biāo)記-整理(Mark-Compact


此算法結(jié)合了標(biāo)記-清除復(fù)制兩個算法的優(yōu)點。也是分兩階段,第1階段從根節(jié)點開始標(biāo)記所有被援用對象,第2階段遍歷全部堆,把清除未標(biāo)記對象并且把存活對象緊縮到堆的其中1塊,按順序排放。此算法避免了標(biāo)記-清除的碎片問題,同時也避免了復(fù)制算法的空間問題。


6.3.     復(fù)制(Copying


此算法把內(nèi)存空間劃為兩個相等的區(qū)域,每次只使用其中1個區(qū)域。垃圾回收時,遍歷當(dāng)前使用區(qū)域,把正在使用中的對象復(fù)制到另外1個區(qū)域中。次算法每次只處理正在使用中的對象,因此復(fù)制本錢比較小,同時復(fù)制過去以后還能進(jìn)行相應(yīng)的內(nèi)存整理,不會出現(xiàn)碎片問題。固然,此算法的缺點也是很明顯的,就是需要兩倍內(nèi)存空間。


6.4.     增量搜集算法


增量搜集器把堆棧分為多個域,每次僅從1個域搜集垃圾。這會造成較小的利用程序中斷。


6.5.     分代搜集算法


這類搜集器把堆棧分為兩個或多個域,用以寄存不同壽命的對象。虛擬機生成的新對象1般放在其中的某個域中。過1段時間,繼續(xù)存在的對象將取得使用期并轉(zhuǎn)入更長壽命的域中。分代搜集器對不同的域使用不同的算法以優(yōu)化性能。這樣可以減少復(fù)制對象的時間。


6.6.     并發(fā)搜集算法


并發(fā)搜集器與利用程序同時運行。這些搜集器在某點上(比如緊縮時)1般都不能不停止其他操作以完成特定的任務(wù),但是由于其他利用程序可進(jìn)行其他的后臺操作,所以中斷其他處理的實際時間大大下降。


6.7.     并行搜集器


并行搜集器使用某種傳統(tǒng)的算法并使用多線程并行的履行它們的工作。在多CPU機器上使用多線程技術(shù)可以顯著的提高java利用程序的可擴大性。


6.8.     自適應(yīng)搜集器


根據(jù)程序運行狀態(tài)和堆的使用狀態(tài),自動選1種適合的垃圾回收算法。這樣可以不局限與1種垃圾回收算法。


6.9.     火車增量算法


垃圾搜集算法1個很大的缺點就是難以控制垃圾回收所占用的CPU時間,和什么時候需要進(jìn)行垃圾回收?;疖囁惴ㄊ欠执鸭魉玫乃惴?,目的是在成熟對象空間中提供限定時間的漸進(jìn)搜集。目前利用于SUN公司的Hotspot虛擬機上。

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 国产精品亚洲第一区在线暖暖韩国 | 国产一区二区三区成人 | www.色网| 成人免费观看黄a大片夜月 日韩亚洲欧美一区 | 激情福利视频 | 男生电影天堂 | 91成人精品 | 草草网| 欧美一区二区三区的 | 欧美胖老太一级毛片 | 久草免费福利 | 欧美在线视频一区二区 | 美女视频网站久久 | 成人91在线| 欧美劲爆第一页 | 亚洲综合自拍 | 性感美女一级毛片 | va在线| 天堂中文在线8 | 久久鬼 | 免费国产一区二区 | 国产日韩欧美精品 | 黄色电影在线免费看 | 伊人精品久久 | 亚洲一区图片 | 麻豆传媒一区二区三区 | 在线视频一区二区 | 免费一区区三区四区 | 日韩三区在线 | 黄视频在线播放 | 精品国产一区二区三区日日嗨 | www九九热| 国产成人精品久久二区二区 | 欧美一级黄 | 色综合久久综合 | 精品一区电影 | 久久久久久综合 | 成人一区二区三区 | 久久久久久久久网站 | 综合久久av | 欧美二区在线观看 |