Java培訓基礎(chǔ)學習之Java虛擬機知識解析
- 作者:新網(wǎng)
- 來源:新網(wǎng)
- 瀏覽:100
- 2018-04-24 12:07:33
所謂JVM,即Java Virtual Machine(Java虛擬機)的縮寫。眾所周知,Java語言的一個非常重要的特點就是與平臺的無關(guān)性,但是它們又是怎么扯上關(guān)系的呢?小編來為大家解答。
<
div> 所謂JVM,即Java Virtual Machine(Java
虛擬機)的縮寫。眾所周知,Java語言的一個非常重要的特點就是與平臺的無關(guān)性,但是它們又是怎么扯上關(guān)系的呢?小編來為大家解答。
作為Java的基礎(chǔ)知識,很多企業(yè)在面試時會提問求職者Java虛擬機的一些知識:
1、Java虛擬機為新生對象分配內(nèi)存有哪兩種方式?
答:指針碰撞和空閑列表。Java虛擬機采用哪種方式為新生對象分配內(nèi)存,取決于所使用的垃圾收集器,當垃圾收集器具有整理過程時,虛擬機將采用指針碰撞的方式;當垃圾收集器的回收過程沒有整理過程時,則采用空閑列表方式。
2、Java虛擬機運行時數(shù)據(jù)區(qū)包括哪些?
答:根據(jù)Java虛擬機規(guī)范的規(guī)定,虛擬機內(nèi)存在Java程序運行時被分為程序計數(shù)器、Java虛擬機棧、本地方法棧、堆和方法區(qū)五個區(qū)域。
3、Java虛擬機類加載的周期包括哪幾個階段?
答:類從被加載到虛擬機內(nèi)存中開始,到卸載出內(nèi)存為止,它的整個生命周期包括:加載、驗證、準備、解析、初始化、使用和卸載七個階段。
4、Java虛擬機分配過程中如何解決線程安全?
答:兩種方式:1)對分配內(nèi)存
空間的動作進行同步處理——實際上虛擬機采用CAS配上失敗重試的方式保證更新操作的原子性;2)把內(nèi)存分配的動作按照線程劃分在不同的空間之中進行,即每個線程在Java堆中預先分配一小塊內(nèi)存,稱為本地線程分配緩沖(TLAB)。哪個線程要分配內(nèi)存,就在哪個線程的TLAB上分配,只有TLAB用完并分配新的TLAB時,才需要同步鎖定。虛擬機是否使用TLAB,可以通過-XX:+/-UseTLAB參數(shù)來設(shè)定。
5、Java虛擬機對象在內(nèi)存中如何布局?
答:在HotSpot虛擬機中,對象在內(nèi)存中存儲的布局可以分為3塊區(qū)域:對象頭(Header)、實例數(shù)據(jù)(Instance Data) 和對齊填充(Padding)。
6、Java虛擬機中主流的訪問方式有哪幾種?
答:有使用句柄和直接指針兩種。使用句柄訪問的最大好處就是reference中存儲的是穩(wěn)定的句柄地址,使用直接指針訪問的最大好處就是速度更快,節(jié)省了一次指針定位的時間開銷。