所謂JVM,即Java Virtual Machine(Java虛拟機)的縮寫。衆所周知,Java語言的一個非常重要的特點就是與平台的無關性,而Java虛拟機是實作這一特點的關鍵。Java虛拟機有自己完善的硬體架構,屏蔽了與具體作業系統平台相關的資訊,使得Java程式隻需生成在Java虛拟機上運作的目标代碼(位元組碼),就可以在多種平台上不加修改地運作。

作為Java的基礎知識,很多企業在面試時會提問求職者Java虛拟機的一些知識:
1、Java虛拟機為新生對象配置設定記憶體有哪兩種方式?
答:指針碰撞和空閑清單。Java虛拟機采用哪種方式為新生對象配置設定記憶體,取決于所使用的垃圾收集器,當垃圾收集器具有整理過程時,虛拟機将采用指針碰撞的方式;當垃圾收集器的回收過程沒有整理過程時,則采用空閑清單方式。
2、Java虛拟機運作時資料區包括哪些?
答:根據Java虛拟機規範的規定,虛拟機記憶體在Java程式運作時被分為程式計數器、Java虛拟機棧、本地方法棧、堆和方法區五個區域。
3、Java虛拟機類加載的周期包括哪幾個階段?
答:類從被加載到虛拟機記憶體中開始,到解除安裝出記憶體為止,它的整個生命周期包括:加載、驗證、準備、解析、初始化、使用和解除安裝七個階段。
4、Java虛拟機配置設定過程中如何解決線程安全?
答:兩種方式:1)對配置設定記憶體空間的動作進行同步處理——實際上虛拟機采用CAS配上失敗重試的方式保證更新操作的原子性;2)把記憶體配置設定的動作按照線程劃分在不同的空間之中進行,即每個線程在Java堆中預先配置設定一小塊記憶體,稱為本地線程配置設定緩沖(TLAB)。哪個線程要配置設定記憶體,就在哪個線程的TLAB上配置設定,隻有TLAB用完并配置設定新的TLAB時,才需要同步鎖定。虛拟機是否使用TLAB,可以通過-XX:+/-UseTLAB參數來設定。
5、Java虛拟機對象在記憶體中如何布局?