Java虛擬機基礎知識你知道多少?

http://www.cnblogs.com/qlky/p/7401841.htmlhtml

 

java虛擬機結構java

http://liuwangshu.cn/java/jvm/1-runtime-data-area.html算法

 

class類文件數組

http://www.cnblogs.com/qlky/p/7401849.html瀏覽器

  • 魔數是什麼?有什麼做用?
  • accessflag存放什麼?
  • this_class, super_class, interface存放什麼?
  • fields存放什麼?包括在方法內存放的變量嗎?方法內的變量存在哪?
  • methods存放什麼?包括父類方法嗎?
  • 什麼是特徵簽名?爲何返回值不能重載已有方法?
  • attributes存放什麼?
  • code屬性存放什麼?接口或抽象類有code屬性嗎?
  • exception屬性存放什麼?
  • constantValue屬性存放什麼?與static,final的關係是什麼?
  • 類變量(static變量)有哪幾種賦值方式?
  • 非static變量的賦值在哪裏進行?
  • final, static, static final的區別?
  • static變量有默認值嗎?final變量呢?

 

類加載器緩存

  • 系統類加載器有幾種類型?分別有什麼做用?
  • 自定義類加載器須要繼承什麼實現?

 

內存模型數據結構

http://www.javashuo.com/article/p-enldunrc-nm.htmljvm

線程共享區域有哪些?私有區域有哪些?函數

爲何更重視共享區域的GC問題?post

PC計數器的做用?

 

虛擬機棧

  • 棧幀是什麼?由什麼組成?與什麼相關?做用?
  • 棧幀須要多少內存在何時肯定?編譯or運行
  • 兩種異常狀況?
  • 局部變量表存放什麼?
  • 操做數棧存放什麼?
  • 基於棧的指令集(Java) vs 基於寄存器的指令集(Android) 各自特色?
  • 動態鏈接區存放什麼?
  • 方法返回地址區做用?

本地方法棧

  • 和虛擬機棧的區別?

 

Java堆

  • 主要做用?
  • 包括哪幾個部分?
  • 內存分佈是物理連續仍是邏輯連續?
  • 什麼是新生代和老生代?
  • 新生代分爲哪幾個區域?怎麼作GC?
  • 老生代分爲哪幾個區域?怎麼作GC?
  • 對象存放在新生代仍是老生代的邏輯?

 

方法區

  • 方法區主要存放什麼?
  • 內存分佈是物理連續仍是邏輯連續?
  • 運行時常量池存放什麼?哪兩類常量?
  • 符號引用包括哪幾類常量?
  • 符號引用 vs 直接引用
  • 符號引用在哪一個階段被轉換爲直接引用?

如下操做分別測試哪一個區域的內存溢出

  • 循環new新的對象並保存於list
  • 生成大量動態類並保存於list
  • 循環調用String.intern()生成大量string實例並保存於list
  • 遞歸調用一個簡單的方法
  • 循環建立線程並在內部不斷申請內存

對於Object object = new Object(),如下分別儲存於哪一個區域

  • Object引用
  • Object實例
  • object內部的方法,接口,父類,對象類型

 

引用類型應該怎麼定位到對象實例?

  • 句柄訪問是什麼?
  • 直接指針訪問是什麼?
  • 優缺點?java的hotspot默認使用哪一個?

 

類加載

  • 分爲幾個階段?哪兩個階段是不必定按順序的?
  • 這些階段標識的是開始順序,進行順序仍是完成順序?是按順序線性執行的嗎?
  •  什麼是靜態綁定和動態綁定?
  • 哪些是靜態綁定的?

加載

  • 用什麼對什麼進行加載?
  • 作了哪幾件事?
  • 加載完成後運行時數據結構被儲存在哪?
  • 生成了什麼對象保存在哪?
  • 自定義類加載器用途有哪些?
  • 什麼是類加載器的雙親委派模式?有什麼好處?

 

驗證

  • 四個階段是什麼?

 

準備

  • 主要工做?
  • 實例變量內存在何時分配?
  • 類變量(static)內存在哪裏分配?
  • 此時類變量的值是多少?何時會進行用戶代碼賦值?
  • 數組初始化時沒有對元素賦值能夠直接使用嗎?

 

解析

  • 主要工做?
  • 對哪裏的符號引用進行解析?
  • 主要解析的符號引用有哪幾類?
  • 可能對一個符號引用進行屢次解析嗎?通常怎麼處理?
  • 類或接口解析流程?
  • 字段解析流程?
  • 類方法解析流程?
  • 接口方法解析流程?

 

初始化

  • 主要工做?初始化的是什麼變量?
  • <clinit>執行規則?
  • <clinit>與類構造函數<init>的區別?JAVA裏第一個被執行<clinit>函數的對象是什麼?
  • 接口中會有<clinit>賦值嗎?和類有什麼區別?
  • 類必定會有<clinit>賦值嗎?

 

多態性

http://www.cnblogs.com/qlky/p/7420795.html

  • 靜態解析成立條件?
  • 什麼是動態鏈接?
  • 四種方法調用字節指令?
  • 什麼是非虛方法?包括哪些?
  • 靜態分派是什麼?
  • 靜態分派發生在哪一個時期?是由虛擬機執行仍是編譯器?
  • 什麼是靜態類型和實際類型?
  • 動態分派是什麼?
  • 根據變量的什麼類型決定分方法的執行版本?
  • 動態分派在什麼時期執行?
  • 什麼是單分派?什麼是多分派?
  • 什麼是方法的宗量?
  • Java靜態分派的宗量有幾個?動態分派的宗量有幾個?
  • 方法重載屬於靜態分派仍是動態分派?

 GC

什麼是四種引用類型?JAVA 四種引用類型

強引用

  • 強引用怎麼使用?
  • 程序空間不足時會拋出oom異常仍是回收強引用?
  • 怎樣才能回收強引用?
  • 強引用保存在哪一個區域?引用對象在哪一個區域?
  • 爲何全局變量須要賦值爲null,局部變量通常不用?
  • ArrayList類型應該怎樣釋放強引用?

 

軟引用

  • 軟引用怎麼使用?
  • 軟引用在什麼狀況下不會被回收?什麼狀況下會?
  • 引用隊列如何使用?有什麼做用?
  • 應用場景?
  • 瀏覽器的後退按鈕。按後退時,這個後退時顯示的網頁內容是從新進行請求仍是從緩存中取出呢?

 

弱引用

  • 怎麼使用?有什麼做用?
  • 弱引用在什麼狀況下不會被回收?什麼狀況下會?
  • 與軟引用的區別?
  • 應用場景?

 

虛引用

  • 怎麼使用?有什麼做用?
  • 弱引用在什麼狀況下不會被回收?什麼狀況下會?
  • 怎麼判斷引用對象是否即將進行GC?

 

垃圾對象搜索算法

  • 什麼是引用計數算法?
  • 爲何JAVA沒有使用引用計數算法?
  • 什麼是根搜索算法?根是什麼?
  • 根搜索算法的兩次標記過程是怎樣的?
  • 被垃圾回收的對象在何時執行finialize()方法?
  • 怎麼判斷需不須要執行finialize()方法?
  • 被第一次標記的對象將會怎樣被回收?
  • 怎麼在finialize()方法裏避免被回收?

 

垃圾收集算法

  • 什麼是標記清除算法?有什麼優缺點?
  • 什麼是複製算法?有什麼優缺點?適用於老生代仍是新生代?
  • 什麼是標記整理算法?有什麼優缺點?適用於老生代仍是新生代?

 

內存分配策略

  • 對象優先在哪一個區分配內存?
  • 什麼對象會進入老生代?
  • 老生代進行GC時,對direct memory有影響嗎?
相關文章
相關標籤/搜索