面試題目一大鍋附件jvm相關內容_第1頁
面試題目一大鍋附件jvm相關內容_第2頁
面試題目一大鍋附件jvm相關內容_第3頁
面試題目一大鍋附件jvm相關內容_第4頁
面試題目一大鍋附件jvm相關內容_第5頁
免費預覽已結束,剩余15頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

JVM是JavaVirtualMachine(Java虛擬機)的縮寫,JVM是一種用于計算設備的規JavaJava虛擬機是實現這一碼。而引入Java語言虛擬機后,Java語言在不同平臺上運行時不需要重新編譯。Java語言使用Java虛擬機了與具體平臺相關的信息,使得Java語言編譯程序只需生成在Java虛擬機上運行的目標代碼(字節碼),就可以在多種平臺上不加修改地運行。Java虛擬機在執行字節碼時,把字節碼解釋成具體平臺上的機器指令執行。這就是Java的能javajavaJAVAclass結構信息class元數據:對應于Java源碼中與常量的信息。包含類/繼承的超類/實現的接口的信方法信息JavaBootstrap負責加載$JAVA_HOMEjre/lib/rt.jarclass,C++實現,不是ClassLoader子類Extension負責加載java平臺中擴展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定 下的jar包App負責記載classpath中指定的jar包 中CustomClassLoader(自定義加載器屬于應用程序根據自身需要自定義的ClassLoader,如tomcat、jboss都會根據j2eeClassLoaderCustomClassLoaderBootStrapClassLoaderclassloaderClassLoader雙親委派模型類加載過程ClassLoaderclassLoaderbootstrpClassLoader.BootstrapclassLoader程序計數器(ProgramCounterRegister)是一塊較小的內存空間,是線程私有的,它的棧Java(JavaVirtualMachineStacks)是線程私有的,它的生命周期與線程相Java一個棧幀(StackFrame①)用于局部變量表、操作棧、動態、方法出口等信本地方法棧(NativeMethodStacks)與虛擬機棧所發揮的作用是非常相似的,其區別不過是虛擬棧為虛擬機執行Java方法(也就是字節碼)服務,而本地方法棧則是為虛擬機使用到的Native方法服務,就對應著一個棧幀在虛擬機棧中從入棧到出棧的過程。堆Java就是存放對象實例,幾乎所有的對象實例都在這里分配內存。Java堆是收集器管理的主要區域,因此很多時候也被稱做“GC”(GarbageCollectedHeap,幸好國內沒翻算法,所以Java堆中還可以細分為:和老年代;再細致一點的有Eden空間、FromSurvivor空間、ToSurvivor空間等。方法區(MethodArea)與Java堆一樣,是各個線程共享的內存區域,它用于已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯后的代碼等數據。雖然Java虛擬機規范把方法區描述為堆的一個邏輯部分,但是它卻有一個別名叫做Non-Heap(非堆),目的應該是與Java堆區分開來。計數:每個對象有一個計數屬性,新增一個時計數加1,釋放時計數減1,計數為0時可以回收。此方法簡單,無法解決對象相互循環的問題。可達性分析(Reachabilityysis):從GCRoots開始向下搜索,搜索所走過的路徑稱為鏈。當一個對象到GCRoots沒有任何鏈相連時,則證明此對象是GC常說的GC(GarbageCollector)roots,特指的是收集器(GarbageCollector)的對象,GC會收集那些不是GCroots且沒有被GCroots的對象。root,GCrootClass-由系統類加載器(systemclassloader)加載的對象,這些類是不能夠被回Thread-StackLocalJavalocalJNILocal-JNIlocalJNIGlobal-JNIMonitorUsed-用于同步的對HeldbyJVM用于JVMGCJVM的實JVM知道的重要的異常類、一些用于處理異常的預分配對象以及一些自定義的類加載器等。然而,JVM并沒有為這些對象提供其它的信息,因此需要去確定哪些是屬于"JVM持有"的了。導致,碎片過多會導致大對象無法分配到足夠的連續內存,從而不得不提前觸發GC,甚至StopTheWorld。每次只使用其中的一塊。當這一塊的內存用完了,就將還存活著的對象到另外一塊上效率問題:在對象存活率較高時,操作次數多,效率降低 收集算法在對象存活率較高時就要執行較多的操作,效率將會變低。更關鍵的50%的空間,就需要有額外的空間進行分配擔保,以應對被使用的內存中所有對象都100%存活的情況,所以在老年代一般不能直接選用這種算法。根據老年代的特點,有人提出了另外一種“標記-整理”(pact)算法,標記不同的回收算法,從而提高回收的效率。比如Java虛擬機中的堆就采用了這種方法分成了和老年代。然后對于不同的代采用不同的回收算法。使用了MinorGC、Minor又稱GC,指發生在的收集動作Java對象大多是朝生夕滅,所以MinorGC、FullMajorGC或老年代GCFullGCMinorGC(不是絕對,ParallelSacvenge收集器MajorGC策略);MajorGCMinorGC10一::主要是用來存放新生的對象。一般占據堆的1/3空間。由于頻繁創建對象,所以會頻繁觸發MinorGC進行回收。老年代)。當Eden區內存不夠的時候就會觸發MinorGC,對區進行一次回MinorGC的過程:MinorGC采用算法。首先,把Eden和ServivorFrom區域中存活的對象到ServicorTo區域(如果有對象的以及達到了老年的標準,則賦值到老年代區),同時把這些對象的+1(如果ServicorTo不夠位置了就放到老年區);EdenServicorFrom中的對象;最后,ServicorTo和ServicorFromServicorToGCServicorFrom區。MajorGCMajorGC前一般都先進行了一次MinorGC,使得有的對象晉身入老年代,導致空間不夠用時才觸發。當MajorGC進行MajorGC采用標記—清除算法:首先掃描一次所有老年代,標記出存活的對象,然后OOM(OutofMemory)時候被放入永久區域.它和和存放實例的區域不同,GC不會在主程序運行期對永久區域進Class的增多而脹滿,最終拋出OOM異常。JVM規范中方法區的實現。不過元空間與永久-XX:MetaspaceSize,初始空間大小,達到該值就會觸發收集進行類型卸載,GC3GCParNew、ParallelScavenge、ParallelOld;用戶程序在繼續運行,而收集程序線程運行于另一個CPU上;Serial/Serial

Serial/SerialOld收集器是最基本最古老的收集器,它是一個單線程收集器,并且在它進行收集時,必須暫停所有用戶線程。Serial收集器是針對的收集器,采用Copying算法,SerialOldMark-Compact算法。它的優點是實現簡單高效,但是缺點是會給用戶帶來停頓。ParallelParallelScavenge收集器是一個的多線程收集器(并行收集器),它在回收Copying算法,該收集器與前兩個收集器有ParallelParallelOldParallelScavenge收集器的老年代版本(并行收集器),CMS(CurrentMarkSweep)收集器是一種以獲取最短回收停頓時間為目標的收集Mark-Sweep算法。(老年代收集器)G1收集器是收集器技術發展最前沿的成果,它是一款面向服務端應用的收詳細查看該篇博 CMS mandLineFlags-jdk1.7默認收集器ParallelScavenge()+ParallelOld(老年jdk1.8默認收集器ParallelScavenge()+ParallelOld(老年jdk1.9默認收集器JVM對JVM內存的系統級的調優主要的目的是減少GC的頻率和FullGC的次數,過多的GCFullGC(CPU),影響系統的吞吐量。特別要關注FullGC,因為它會對整個堆進行整理,導致FullGC一般由于以下幾種情況:PemanetGeneration空間不足(jdk8已經沒有持久代增大PermGen空間,避免太多靜態對象,控制好和舊生代的比JVM調優主要是通過控制堆內存的各個部分的比例和GC策略來實現,下面來看看各部分1).設置過一是GC次數非常頻繁,增大系統消耗;二是導致大對象直接進入舊生代,占據了舊生代剩余空間,誘發FullGC2).設置過一是設置過大會導致舊生代過小(堆總量一定),從而誘發FullGC;二是新生代GC耗時大幅度增加一般說來占整個堆1/3比較合Survivor導致對象從eden直接到達舊生代,降低了在的存活時SurvivoredenGC另外,通過-XX:MaxTenuringThreshold=n來控制存活時間,盡量讓對象在新由內存管理和回收可知和舊生代都有多種GC策略和組合搭配,選擇這些策略對于我們這些開發人員是個難題,JVM提供兩種較為簡單的GC策略的設置方式如果各項參數設置合理,系統沒有超時日志出現,GC頻率不高,GC耗時不高,那么沒有GCGC1-3GC,則必須優化。MinorGCMinorGC10FullGCFullGC101針對JVM堆的設置,一般可以通過-Xms-Xmx限定其最小、最大值,為了防止收集年輕代和年老代將根據默認的比例(1:2)-XX:newSize-XX:MaxNewSize來設置其絕對大小。同樣,為了防止年輕代的堆收縮,我們通常會把-XX:newSize-XX:MaxNewSize設置為同樣大小。1)GC的周期,但會增加每次GC的時間;小的年老代會導致更頻繁的FullGC2)GCGCFullGC的頻率FullGC盡量少的原則,讓年老代盡量緩存常用對象,JVM1:2也FullGC的1:1。但應該給年老代至少預1/3的增長空間。在配置較好的機器上(比如多核、大內存),可以為年老代選擇并行收集算法:-XX:+UseParallelOldGC。256K就足用。

Jpsjavajstack-l52676>javacpu GCjmap-heap jmaphisto[:live]pid帶上live則只統計活對象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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論