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有影響嗎?