




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
JVM是JavaVirtualMachine(Java虛擬機(jī))的縮寫,JVM是一種用于計算設(shè)備的規(guī)JavaJava虛擬機(jī)是實(shí)現(xiàn)這一碼。而引入Java語言虛擬機(jī)后,Java語言在不同平臺上運(yùn)行時不需要重新編譯。Java語言使用Java虛擬機(jī)了與具體平臺相關(guān)的信息,使得Java語言編譯程序只需生成在Java虛擬機(jī)上運(yùn)行的目標(biāo)代碼(字節(jié)碼),就可以在多種平臺上不加修改地運(yùn)行。Java虛擬機(jī)在執(zhí)行字節(jié)碼時,把字節(jié)碼解釋成具體平臺上的機(jī)器指令執(zhí)行。這就是Java的能javajavaJAVAclass結(jié)構(gòu)信息class元數(shù)據(jù):對應(yīng)于Java源碼中與常量的信息。包含類/繼承的超類/實(shí)現(xiàn)的接口的信方法信息JavaBootstrap負(fù)責(zé)加載$JAVA_HOMEjre/lib/rt.jarclass,C++實(shí)現(xiàn),不是ClassLoader子類Extension負(fù)責(zé)加載java平臺中擴(kuò)展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定 下的jar包App負(fù)責(zé)記載classpath中指定的jar包 中CustomClassLoader(自定義加載器屬于應(yīng)用程序根據(jù)自身需要自定義的ClassLoader,如tomcat、jboss都會根據(jù)j2eeClassLoaderCustomClassLoaderBootStrapClassLoaderclassloaderClassLoader雙親委派模型類加載過程ClassLoaderclassLoaderbootstrpClassLoader.BootstrapclassLoader程序計數(shù)器(ProgramCounterRegister)是一塊較小的內(nèi)存空間,是線程私有的,它的棧Java(JavaVirtualMachineStacks)是線程私有的,它的生命周期與線程相Java一個棧幀(StackFrame①)用于局部變量表、操作棧、動態(tài)、方法出口等信本地方法棧(NativeMethodStacks)與虛擬機(jī)棧所發(fā)揮的作用是非常相似的,其區(qū)別不過是虛擬棧為虛擬機(jī)執(zhí)行Java方法(也就是字節(jié)碼)服務(wù),而本地方法棧則是為虛擬機(jī)使用到的Native方法服務(wù),就對應(yīng)著一個棧幀在虛擬機(jī)棧中從入棧到出棧的過程。堆Java就是存放對象實(shí)例,幾乎所有的對象實(shí)例都在這里分配內(nèi)存。Java堆是收集器管理的主要區(qū)域,因此很多時候也被稱做“GC”(GarbageCollectedHeap,幸好國內(nèi)沒翻算法,所以Java堆中還可以細(xì)分為:和老年代;再細(xì)致一點(diǎn)的有Eden空間、FromSurvivor空間、ToSurvivor空間等。方法區(qū)(MethodArea)與Java堆一樣,是各個線程共享的內(nèi)存區(qū)域,它用于已被虛擬機(jī)加載的類信息、常量、靜態(tài)變量、即時編譯器編譯后的代碼等數(shù)據(jù)。雖然Java虛擬機(jī)規(guī)范把方法區(qū)描述為堆的一個邏輯部分,但是它卻有一個別名叫做Non-Heap(非堆),目的應(yīng)該是與Java堆區(qū)分開來。計數(shù):每個對象有一個計數(shù)屬性,新增一個時計數(shù)加1,釋放時計數(shù)減1,計數(shù)為0時可以回收。此方法簡單,無法解決對象相互循環(huán)的問題??蛇_(dá)性分析(Reachabilityysis):從GCRoots開始向下搜索,搜索所走過的路徑稱為鏈。當(dāng)一個對象到GCRoots沒有任何鏈相連時,則證明此對象是GC常說的GC(GarbageCollector)roots,特指的是收集器(GarbageCollector)的對象,GC會收集那些不是GCroots且沒有被GCroots的對象。root,GCrootClass-由系統(tǒng)類加載器(systemclassloader)加載的對象,這些類是不能夠被回Thread-StackLocalJavalocalJNILocal-JNIlocalJNIGlobal-JNIMonitorUsed-用于同步的對HeldbyJVM用于JVMGCJVM的實(shí)JVM知道的重要的異常類、一些用于處理異常的預(yù)分配對象以及一些自定義的類加載器等。然而,JVM并沒有為這些對象提供其它的信息,因此需要去確定哪些是屬于"JVM持有"的了。導(dǎo)致,碎片過多會導(dǎo)致大對象無法分配到足夠的連續(xù)內(nèi)存,從而不得不提前觸發(fā)GC,甚至StopTheWorld。每次只使用其中的一塊。當(dāng)這一塊的內(nèi)存用完了,就將還存活著的對象到另外一塊上效率問題:在對象存活率較高時,操作次數(shù)多,效率降低 收集算法在對象存活率較高時就要執(zhí)行較多的操作,效率將會變低。更關(guān)鍵的50%的空間,就需要有額外的空間進(jìn)行分配擔(dān)保,以應(yīng)對被使用的內(nèi)存中所有對象都100%存活的情況,所以在老年代一般不能直接選用這種算法。根據(jù)老年代的特點(diǎn),有人提出了另外一種“標(biāo)記-整理”(pact)算法,標(biāo)記不同的回收算法,從而提高回收的效率。比如Java虛擬機(jī)中的堆就采用了這種方法分成了和老年代。然后對于不同的代采用不同的回收算法。使用了MinorGC、Minor又稱GC,指發(fā)生在的收集動作Java對象大多是朝生夕滅,所以MinorGC、FullMajorGC或老年代GCFullGCMinorGC(不是絕對,ParallelSacvenge收集器MajorGC策略);MajorGCMinorGC10一::主要是用來存放新生的對象。一般占據(jù)堆的1/3空間。由于頻繁創(chuàng)建對象,所以會頻繁觸發(fā)MinorGC進(jìn)行回收。老年代)。當(dāng)Eden區(qū)內(nèi)存不夠的時候就會觸發(fā)MinorGC,對區(qū)進(jìn)行一次回MinorGC的過程:MinorGC采用算法。首先,把Eden和ServivorFrom區(qū)域中存活的對象到ServicorTo區(qū)域(如果有對象的以及達(dá)到了老年的標(biāo)準(zhǔn),則賦值到老年代區(qū)),同時把這些對象的+1(如果ServicorTo不夠位置了就放到老年區(qū));EdenServicorFrom中的對象;最后,ServicorTo和ServicorFromServicorToGCServicorFrom區(qū)。MajorGCMajorGC前一般都先進(jìn)行了一次MinorGC,使得有的對象晉身入老年代,導(dǎo)致空間不夠用時才觸發(fā)。當(dāng)MajorGC進(jìn)行MajorGC采用標(biāo)記—清除算法:首先掃描一次所有老年代,標(biāo)記出存活的對象,然后OOM(OutofMemory)時候被放入永久區(qū)域.它和和存放實(shí)例的區(qū)域不同,GC不會在主程序運(yùn)行期對永久區(qū)域進(jìn)Class的增多而脹滿,最終拋出OOM異常。JVM規(guī)范中方法區(qū)的實(shí)現(xiàn)。不過元空間與永久-XX:MetaspaceSize,初始空間大小,達(dá)到該值就會觸發(fā)收集進(jìn)行類型卸載,GC3GCParNew、ParallelScavenge、ParallelOld;用戶程序在繼續(xù)運(yùn)行,而收集程序線程運(yùn)行于另一個CPU上;Serial/Serial
Serial/SerialOld收集器是最基本最古老的收集器,它是一個單線程收集器,并且在它進(jìn)行收集時,必須暫停所有用戶線程。Serial收集器是針對的收集器,采用Copying算法,SerialOldMark-Compact算法。它的優(yōu)點(diǎn)是實(shí)現(xiàn)簡單高效,但是缺點(diǎn)是會給用戶帶來停頓。ParallelParallelScavenge收集器是一個的多線程收集器(并行收集器),它在回收Copying算法,該收集器與前兩個收集器有ParallelParallelOldParallelScavenge收集器的老年代版本(并行收集器),CMS(CurrentMarkSweep)收集器是一種以獲取最短回收停頓時間為目標(biāo)的收集Mark-Sweep算法。(老年代收集器)G1收集器是收集器技術(shù)發(fā)展最前沿的成果,它是一款面向服務(wù)端應(yīng)用的收詳細(xì)查看該篇博 CMS mandLineFlags-jdk1.7默認(rèn)收集器ParallelScavenge()+ParallelOld(老年jdk1.8默認(rèn)收集器ParallelScavenge()+ParallelOld(老年jdk1.9默認(rèn)收集器JVM對JVM內(nèi)存的系統(tǒng)級的調(diào)優(yōu)主要的目的是減少GC的頻率和FullGC的次數(shù),過多的GCFullGC(CPU),影響系統(tǒng)的吞吐量。特別要關(guān)注FullGC,因為它會對整個堆進(jìn)行整理,導(dǎo)致FullGC一般由于以下幾種情況:PemanetGeneration空間不足(jdk8已經(jīng)沒有持久代增大PermGen空間,避免太多靜態(tài)對象,控制好和舊生代的比JVM調(diào)優(yōu)主要是通過控制堆內(nèi)存的各個部分的比例和GC策略來實(shí)現(xiàn),下面來看看各部分1).設(shè)置過一是GC次數(shù)非常頻繁,增大系統(tǒng)消耗;二是導(dǎo)致大對象直接進(jìn)入舊生代,占據(jù)了舊生代剩余空間,誘發(fā)FullGC2).設(shè)置過一是設(shè)置過大會導(dǎo)致舊生代過?。ǘ芽偭恳欢ǎ?,從而誘發(fā)FullGC;二是新生代GC耗時大幅度增加一般說來占整個堆1/3比較合Survivor導(dǎo)致對象從eden直接到達(dá)舊生代,降低了在的存活時SurvivoredenGC另外,通過-XX:MaxTenuringThreshold=n來控制存活時間,盡量讓對象在新由內(nèi)存管理和回收可知和舊生代都有多種GC策略和組合搭配,選擇這些策略對于我們這些開發(fā)人員是個難題,JVM提供兩種較為簡單的GC策略的設(shè)置方式如果各項參數(shù)設(shè)置合理,系統(tǒng)沒有超時日志出現(xiàn),GC頻率不高,GC耗時不高,那么沒有GCGC1-3GC,則必須優(yōu)化。MinorGCMinorGC10FullGCFullGC101針對JVM堆的設(shè)置,一般可以通過-Xms-Xmx限定其最小、最大值,為了防止收集年輕代和年老代將根據(jù)默認(rèn)的比例(1:2)-XX:newSize-XX:MaxNewSize來設(shè)置其絕對大小。同樣,為了防止年輕代的堆收縮,我們通常會把-XX:newSize-XX:MaxNewSize設(shè)置為同樣大小。1)GC的周期,但會增加每次GC的時間;小的年老代會導(dǎo)致更頻繁的FullGC2)GCGCFullGC的頻率FullGC盡量少的原則,讓年老代盡量緩存常用對象,JVM1:2也FullGC的1:1。但應(yīng)該給年老代至少預(yù)1/3的增長空間。在配置較好的機(jī)器上(比如多核、大內(nèi)存),可以為年老代選擇并行收集算法:-XX:+UseParallelOldGC。256K就足用。
Jpsjavajstack-l52676>javacpu GCjmap-heap jmaphisto[:live]pid帶上live則只統(tǒng)計活對象jmap-histo:livejmapdumpjmap-dump:format=b,file=./dump.datdumpMAT、VisualVM、jhatjhat-port9998 jstat-gc49364250YGC、YGTGC
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工地消防安全培訓(xùn)
- 2025年工程經(jīng)濟(jì)學(xué)考試試題及答案詳解
- 2025年中國特色社會主義理論測試題及答案
- 2025年安徽省合肥市行知學(xué)校英語七下期中質(zhì)量跟蹤監(jiān)視試題含答案
- Unit 5 Art world Reading課件 牛津譯林版九年級英語上冊
- 中班親子教學(xué)活動
- 2025年法律實(shí)務(wù)技能與案例分析考試卷及答案
- 2025年大學(xué)生創(chuàng)新創(chuàng)業(yè)大賽試題及答案
- 2025年地理學(xué)基礎(chǔ)知識模擬考試試題及答案
- 2025年城市規(guī)劃與建設(shè)管理考試卷及答案
- 護(hù)理新技術(shù)項目匯報
- DL T596《電力設(shè)備預(yù)防性實(shí)驗規(guī)程》知識培訓(xùn)
- DB11T 594.1-2017 地下管線非開挖鋪設(shè)工程施工及驗收技術(shù)規(guī)程 第1部分:水平定向鉆施工
- 2024低空航行系統(tǒng)白皮書:擁抱低空經(jīng)濟(jì)安全智慧飛行
- 高中生禁毒教育主題班會教學(xué)課件
- 財政投資項目評審服務(wù)投標(biāo)方案(技術(shù)方案)
- DB3212-T 1162-2024 學(xué)校集體用餐配送單位檢驗室能力建設(shè)規(guī)范
- 2024年河南焦作中考生物試題及答案1
- 醫(yī)院培訓(xùn)課件:《導(dǎo)管相關(guān)靜脈血栓形成專家共識》
- 帆船理論培訓(xùn)課程設(shè)計
- 《有機(jī)化學(xué)》課程說課
評論
0/150
提交評論