簡單題(5道)
考查內容:JVM運行時數據區域
題干:Java虛擬機棧的主要作用是?
A. 存儲對象實例
B. 存儲方法調用和局部變量
C. 存儲靜態字段
D. 存儲字節碼指令
正確答案:B
解析:虛擬機棧用于存儲方法調用幀(包括局部變量表和操作數棧),對象實例存儲在堆中,靜態字段存儲在方法區,字節碼指令存儲在方法區。
考查內容:類加載機制
題干:以下哪個不是類加載的階段?
A. 加載
B. 驗證
C. 編譯
D. 初始化
正確答案:C
解析:類加載分為加載、驗證、準備、解析、初始化,編譯是JIT編譯器的行為,不屬于類加載階段。
考查內容:垃圾回收算法
題干:Mark-Sweep算法的主要缺點是?
A. 需要STW(Stop-The-World)
B. 無法處理循環引用
C. 產生內存碎片
D. 依賴分代思想
正確答案:C
解析:Mark-Sweep算法標記存活對象后直接清理,可能導致內存碎片化,而循環引用可通過算法檢測,分代是優化策略。
考查內容:內存模型
題干:volatile
關鍵字的主要作用是?
A. 保證原子性
B. 防止指令重排序
C. 創建線程副本
D. 鎖定內存地址
正確答案:B
解析:volatile
通過禁止指令重排序和提供可見性保證,但不保證原子性,線程副本是舊版JMM的概念。
考查內容:JVM架構
題干:以下哪項屬于JVM運行時數據區?
A. 寄存器
B. 本地方法棧
C. 內核棧
D. 硬件緩存
正確答案:B
解析:JVM數據區包括虛擬機棧、本地方法棧、堆、方法區和程序計數器,其他選項屬于系統或硬件層面。
中等題(10道)
考查內容:垃圾回收機制
題干:CMS(Concurrent Mark Sweep)的正確描述是?
A. 基于標記-清除算法
B. 需要完全STW
C. 適合老年代回收
D. 會產生緊湊內存
正確答案:A
解析:CMS采用標記-清除算法,并發標記和清理減少STW,主要針對老年代,但會留下內存碎片。
考查內容:類加載機制
題干:雙親委派模型的作用是?
A. 加快類加載速度
B. 避免類沖突
C. 優先加載自定義類
D. 減少內存占用
正確答案:B
解析:雙親委派通過優先加載核心類庫(如java.lang包),避免用戶類覆蓋核心類,確保安全。
考查內容:內存模型
題干:synchronized
塊對鎖的影響是?
A. 升級為重量級鎖
B. 觸發GC操作
C. 釋放鎖后對象可被回收
D. 阻塞其他線程訪問
正確答案:C
解析:synchronized
解鎖后,對象監視器不再持有,若無其他引用則對象可被回收。
考查內容:JVM運行流程
題干:Java代碼執行的第一步是?
A. 編譯為字節碼
B. 加載類到方法區
C. 解釋執行指令
D. 分配堆內存
正確答案:B
解析:JVM啟動后先加載類到方法區(如類信息、常量池),再執行字節碼。
考查內容:數據區域
題干:以下哪項是線程共享的?
A. 虛擬機棧
B. 本地方法棧
C. 堆
D. 程序計數器
正確答案:C
解析:堆是全局共享的,虛擬機棧、本地方法棧和程序計數器均為線程私有。
考查內容:垃圾回收算法
題干:G1收集器的特點不包括?
A. 基于Region分區
B. 需要完全STW
C. 支持并行壓縮
D. 可預測停頓時間
正確答案:B
解析:G1通過并行化和分Region回收減少STW時間,且支持可配置的停頓時間預測。
考查內容:類加載機制
題干:以下哪項屬于類初始化的觸發條件?
A. 父類初始化完成
B. 主動調用靜態方法
C. 創建子類對象
D. 加載類文件到內存
正確答案:B
解析:類初始化(即方法執行)由主動引用(如調用靜態方法)觸發,被動引用(如創建對象)不會觸發。
考查內容:內存模型
題干:final
字段的可見性如何保證?
A. 插入內存屏障
B. 禁止指令重排序
C. 使用鎖同步
D. 延遲初始化
正確答案:B
解析:final
字段在構造函數完成后立即可見,JMM通過禁止對其寫操作的指令重排序保證可見性。
考查內容:JVM架構
題干:方法區存儲的內容不包括?
A. 類元數據
B. 常量池
C. 線程狀態
D. 靜態變量
正確答案:C
解析:方法區存儲類信息、常量池和靜態變量,線程狀態由虛擬機棧中的程序計數器記錄。
考查內容:垃圾回收機制
題干:ZGC(Z Garbage Collector)的核心目標是?
A. 減少內存碎片
B. 支持超大堆回收
C. 實現鎖free暫停
D. 優化新生代回收
正確答案:B
解析:ZGC設計目標是處理TB級堆內存,同時保持低延遲,而非僅解決碎片或鎖競爭問題。
困難題(5道)
考查內容:內存模型與多線程
題干:以下關于volatile
和synchronized
的說法正確的是?
A. volatile
比synchronized
更輕量
B. synchronized
能保證原子性
C. volatile
可替代synchronized
D. 兩者均依賴CPU鎖
正確答案:A
解析:volatile
僅保證可見性和禁止重排序,synchronized
額外提供原子性和互斥,但性能開銷更大。
考查內容:類加載機制與熱更新
題干:JVM中類熱替換(HotSwap)的關鍵限制是?
A. 方法簽名不可修改
B. 類加載器必須一致
C. 不能添加新的接口
D. 靜態變量會被重置
正確答案:A
解析:熱替換要求新類的方法簽名與原類完全一致,否則會導致兼容性問題,靜態變量狀態需手動恢復。
考查內容:垃圾回收與內存分配
題干:TLAB(Thread-Local Allocation Buffer)的主要目的是?
A. 減少全局鎖競爭
B. 提高對象訪問速度
C. 避免內存碎片
D. 加速跨代對象晉升
正確答案:A
解析:TLAB為每個線程分配獨立內存區域,減少多線程并發分配時的全局鎖(如Eden區鎖)競爭。
考查內容:JVM底層原理
題干:JVM中方法調用的棧幀不包含以下哪項?
A. 局部變量表
B. 動態鏈接
C. 方法出口地址
D. 對象頭信息
正確答案:D
解析:棧幀包含局部變量表、操作數棧、動態鏈接(方法引用)和方法返回地址,對象頭信息存儲在堆中。
考查內容:內存模型與指令重排序
題干:假設代碼為:
int a = 1;
int b = 2;
// 可能發生重排序
System.out.println(a);
System.out.println(b);
以下哪項是合法的重排序結果?
A. 1, 2
B. 2, 1
C. 打印順序隨機
D. 僅允許a=1在前
正確答案:B
解析:在無happens-before
約束的場景下,JVM可能將a=1
和b=2
的賦值重排序為b=2
先執行,導致輸出2,1。
以上題目涵蓋JVM核心知識點,難度分層合理,解析清晰。如需調整或補充,請隨時告知!