jvm內存模型,類加載機制,GC算法,垃圾回收器,jvm線上調優等常見的面試題及答案
JVM內存模型
JVM內存模型包括哪些區域 答案 :JVM內存模型主要包括以下區域: 程序計數器 :是一塊較小的內存空間,它可以看作是當前線程所執行的字節碼的行號指示器,用于記錄正在執行的虛擬機字節碼指令的地址。Java虛擬機棧 :每個方法在執行的同時都會創建一個棧幀,用于存儲局部變量表、操作數棧、動態鏈接、方法出口等信息。本地方法棧 :與Java虛擬機棧類似,不過它是為Native方法服務的。Java堆 :是JVM所管理的內存中最大的一塊,是被所有線程共享的一塊內存區域,幾乎所有的對象實例以及數組都在這里分配內存。方法區 :用于存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯后的代碼等數據。在Java 8及之后版本中,永久代被移除,取而代之的是元空間,元空間并不在堆內存中,而是使用本地內存。 堆內存的結構是怎樣的 答案 :堆內存分為年輕代和老年代,年輕代又分為Eden空間和兩個Survivor空間(一般稱為Survivor from和Survivor to)。新創建的對象一般會先分配到Eden區,當Eden區滿了之后,會觸發Minor GC,存活下來的對象會被移動到Survivor區。在Survivor區經過多次GC后仍然存活的對象,會被移動到老年代。老年代主要存放生命周期較長的對象。
類加載機制
什么是類加載 答案 :類加載是指將Java類的字節碼文件(.class文件)轉換成內存中運行時數據結構(如java.lang.Class對象)的過程。這個過程由Java虛擬機的類加載器完成,是Java動態性的基礎。 類加載的時機有哪些 答案 :Java虛擬機采用惰性加載策略,類會在以下幾種情況下被加載: 創建類的實例,通過new關鍵字或反射機制。 訪問類的靜態變量或靜態方法,注意是主動訪問。 反射調用,如通過Class.forName()等方法顯式加載類。 初始化類的子類,此時父類也會被加載(若尚未加載)。 JVM啟動時指定的主類,即包含main方法的類。
GC算法
GC有哪些常見的判定對象可回收的方法 答案 : 引用計數法 :給對象添加一個引用計數器,每當有一個地方引用它時,計數器值就加1;當引用失效時,計數器值就減1,當計數器為0時,就認為這個對象可以被回收。但這種方法存在循環引用的問題,導致對象無法被回收。可達性分析算法 :通過一系列的“GC Roots”對象作為起始點,從這些節點開始向下搜索,搜索所走過的路徑稱為引用鏈,當一個對象到GC Roots沒有任何引用鏈相連時,則證明此對象是不可用的,即可以被回收。 GC的三種收集方法及其原理與特點 答案 : 標記-清除算法 :分為標記和清除兩個階段。首先標記出所有需要回收的對象,在標記完成后,統一回收所有被標記的對象。優點是實現簡單,缺點是容易產生內存碎片,導致后續大對象無法分配內存。復制算法 :將可用內存按容量劃分為大小相等的兩塊,每次只使用其中的一塊。當這一塊的內存用完了,就將還存活著的對象復制到另外一塊上面,然后再把已使用過的內存空間一次清理掉。優點是不會產生內存碎片,缺點是內存利用率低,只使用了一半的內存。標記-壓縮(標記-整理)算法 :標記階段和標記-清除算法一樣,標記出所有需要回收的對象,清除階段不是直接清理被標記的對象,而是將所有存活的對象向一端移動,然后直接清理掉邊界以外的內存。優點是解決了內存碎片問題,同時內存利用率比復制算法高,缺點是移動對象時需要一定的開銷。
垃圾回收器
常見的垃圾回收器有哪些 答案 :常見的垃圾回收器有Serial、Serial Old、ParNew、Parallel Scavenge、Parallel Old、CMS、G1等。 CMS收集器與G1收集器的特點 答案 : CMS收集器 :是一種以獲取最短回收停頓時間為目標的收集器。采用“標記-清除”算法,具有并發收集、低停頓的特點,但是會產生內存碎片,并且對CPU資源非常敏感,在并發階段會和用戶線程搶占CPU資源。G1收集器 :是一種面向堆內存任何部分進行回收的收集器,將堆內存劃分為多個大小相等的獨立區域(Region),可以預測停頓時間,兼具高吞吐量和低延遲的特點,采用“標記-整理”算法,不會產生內存碎片,能更好地處理大對象和巨型對象。
JVM線上調優
什么情況下需要進行JVM調優 答案 :出現以下情況時通常需要進行JVM調優: Heap內存(老年代)持續上漲達到設置的最大內存值。 Full GC次數頻繁。 GC停頓(Stop The World)時間過長(超過1秒,具體值按應用場景而定)。 應用出現OutOfMemory等內存異常。 應用中有使用本地緩存且占用大量內存空間。 系統吞吐量與響應性能不高或下降。 應用的CPU占用過高不下或內存占用過高不下。 JVM調優時關注哪些指標 答案 : 吞吐量 :用戶代碼時間/(用戶代碼執行時間+垃圾回收時間),吞吐量越高算法越好。低延遲 :STW越短,響應時間越好,暫停時間越短算法越好。Minor GC盡可能多的收集垃圾對象 :遵守這一原則可以降低應用程序Full GC的發生頻率,因為Full GC較耗時,可能會影響應用程序的延遲要求或吞吐量。
本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71152.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71152.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71152.shtml
如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!