歡迎光臨
每天分享高質量文章

Java中高級面試題(6)

點擊上方“芋道原始碼”,選擇“置頂公眾號”

技術文章第一時間送達!

原始碼精品專欄

 

對於有一定經驗的開發者,在面試過程中多多少少都會被問及jvm相關知識,但是往往在實際開發中涉及較少,這裡整理一些知識點做一期面試題庫拿出來,希望對有用到朋友有一些參考。


小編水平有限,可以把常考題型列出來,但解答部分僅做參考,如果有知識點錯誤希望能夠留言糾正,如果是有更好的參考答案,更加歡迎留言大家探討,我會置頂,以上這些,下麵是正題。

Java語言中一個顯著的特點就是引入了垃圾回收機制,這個大家都清楚,垃圾回收的概念這裡也不做介紹,重點是垃圾回收是在什麼時候開始?對什麼東西,做了什麼事情?

GC何時開始:

所有的回收器型別都是基於分代技術來實現的,那就必須要清楚物件按其生命周期是如何劃分的。

  • 年輕代:劃分為三個區域:原始區(Eden)和兩個小的存活區(Survivor),兩個存活區按功能分為From和To。絕大多數的物件都在原始區分配,超過一個垃圾回收操作仍然存活的物件放到存活區。垃圾回收絕大部分發生在年輕代。

  • 年老代:儲存年輕代中經過多個回收周期仍然存活的物件,對於一些大的記憶體分配,也可能直接分配到永久代。

  • 持久代:儲存類、方法以及它們的描述信息,這裡基本不產生垃圾回收。


有了以上這些鋪墊之後開始回答GC何時開始:

Eden記憶體滿了之後,開始Minor GC(從年輕代空間回收記憶體被稱為 Minor GC);升到老年代的物件所需空間大於老年代剩餘空間時開始Full GC(但也可能小於剩餘空間時,被HandlePromotionFailure引數強制Full GC)

對什麼東西操作,即垃圾回收的物件是什麼:

從root開始搜索沒有可達物件,而且經過第一次標記、清理後,仍然沒有複活的物件。 

做了什麼東西:

主要做了清理物件,整理記憶體的工作。具體的引申如下


垃圾回收器的型別:

  • 串行垃圾回收器(Serial Garbage Collector)

  • 並行垃圾回收器(Parallel Garbage Collector)

  • 併發標記掃描垃圾回收器(CMS Garbage Collector)

  • G1垃圾回收器(G1 Garbage Collector)


垃圾回收演算法:

  • 取用計數法

  • 標記清除法

  • 複製演算法

  • 標記壓縮演算法

  • 分代演算法

  • 分割槽演算法


以上這些,可以自己瞭解一下,這裡列舉幾篇相關文章:

JVM的記憶體區域劃分

JVM知識點梳理

JVM記憶體分配與回收

JVM記憶體管理機制

Java虛擬機學習 – 垃圾收集器


類在虛擬機中的加載過程

加載Loading:

通過一個類的全限定名來獲取一個二進制位元組流、將這個位元組流所代表的靜態儲存結構轉化為方法區的運行時資料結構、在記憶體中生成一個代表這個類的java.lang.Class物件,作為方法區這個類的各種資料的訪問入口。

驗證Verification:

確保Class檔案的位元組流中包含的信息符合當前虛擬機的要求,並不會危害虛擬機的自身安全。

準備Preparation:

正式為類變數分配記憶體並設置類變數初始值。

解析Resolution:

虛擬機將常量池內的符號取用替換為直接取用的過程。

初始化Initialization:

類加載過程的最後一步,到了這個階段才真正開始執行類中定義的Java程式代碼。

使用Using:

根據你寫的程式代碼定義的行為執行。

卸載Unloading:

GC負責卸載,這部分一般不用討論。

以上這些拋磚引玉,歡迎留言更清晰的類加載過程,相關文章可以閱讀:

類加載器詳解

詳解java類的生命周期

談談我對面向物件以及類與物件的理解

強取用、軟取用、弱取用、虛取用與GC的關係

強取用:new出的物件之類的取用,只要強取用還在,永遠不會回收。

軟取用:取用但非必須的物件,記憶體上限溢位異常之前回收。 

弱取用:非必須的物件,物件只能生存到下一次垃圾收集發生之前。 

虛取用:對生存時間無影響,在垃圾回收時得到通知。

這個相對好理解了,相關閱讀如下:

Java 如何有效地避免OOM:善於利用軟取用和弱取用


知識星球

目前在知識星球(https://t.zsxq.com/2VbiaEu)更新瞭如下 Dubbo 原始碼解析如下:

01. 除錯環境搭建
02. 專案結構一覽
03. API 配置(一)之應用
04. API 配置(二)之服務提供者
05. API 配置(三)之服務消費者
06. 屬性配置
07. XML 配置
08. 核心流程一覽

09. 拓展機制 SPI

10. 執行緒池


一共 60 篇++

赞(0)

分享創造快樂