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