Java面試問題總結——如果老年代對象引用年輕代對象,年輕代對象是否會被垃圾回收?

     這個問題考察了很多知識點,我們需要對Java內存管理和垃圾回收機制有很深入的認識,本文將系統闡述這兩個方面內容,最後再給出這個問題的答案。該問題是面試國內一家主攻雲安全的互聯網公司的問題之一,這也說明了該公司比較深厚的技術沉澱,整場面試技術官拋出了很多好的問題,後面我會再逐一整理。

一、Java內存管理

     在C語言中,開發人員可以直接訪問內存並在代碼中引用內存單元,這種機制雖然也有好處但一旦出現問題也很難定位問題。對於Java開發人員來說,則沒有這樣的煩惱,因爲Java直接將內存管理交由JVM來管理,這樣開發人員在編寫程序的時候就不用擔心內存的使用情況而可以專注內容的實現。但這其實也造成了一點隱患,如果不瞭解JVM內存管理的機制,很可能會因一些錯誤的代碼寫法而導致內存泄漏或內存溢出。

     Java虛擬機在執行Java程序的過程中會把它所管理的內存劃分爲若干不同的數據區域,這些區域都有各自的用途以及創建和銷燬的時間。Java虛擬機所管理的內存包括程序計數器、虛擬機棧、本地方法棧、方法區和堆,下面內容根據數據區域詳細介紹。

Java內存管理結構圖

1.程序計數器(Program Counter Register)

     程序計數器是一塊較小的內存空間,可以看作當前線程所執行字節碼的行號指示器,即指向正在執行的字節碼。在概念模型中,字節碼解釋器的工作就是通過改變這個程序計數器的值來選取下一條字節碼的指令,分支、循環、跳轉、異常處理、線程恢復等基礎功能都要依賴這個計數器來完成。

 

2.虛擬機棧(Virtual Machine Stack)

3.本地方法棧(Native Method Stack)

4.方法區(Method Area)

5.堆(Heap)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章