×

Java培訓(xùn)基礎(chǔ)學(xué)習(xí)之Java虛擬機(jī)知識(shí)解析

  • 作者:新網(wǎng)
  • 來源:新網(wǎng)
  • 瀏覽:100
  • 2018-04-24 12:07:33

所謂JVM,即Java Virtual Machine(Java虛擬機(jī))的縮寫。眾所周知,Java語言的一個(gè)非常重要的特點(diǎn)就是與平臺(tái)的無關(guān)性,但是它們又是怎么扯上關(guān)系的呢?小編來為大家解答。

  20150619_8403fcf6dfb222b5192aXUt8c7bgg9Ko.jpg

<div>  所謂JVM,即Java Virtual Machine(Java虛擬機(jī))的縮寫。眾所周知,Java語言的一個(gè)非常重要的特點(diǎn)就是與平臺(tái)的無關(guān)性,但是它們又是怎么扯上關(guān)系的呢?小編來為大家解答。
  作為Java的基礎(chǔ)知識(shí),很多企業(yè)在面試時(shí)會(huì)提問求職者Java虛擬機(jī)的一些知識(shí):
  1、Java虛擬機(jī)為新生對(duì)象分配內(nèi)存有哪兩種方式?
  答:指針碰撞和空閑列表。Java虛擬機(jī)采用哪種方式為新生對(duì)象分配內(nèi)存,取決于所使用的垃圾收集器,當(dāng)垃圾收集器具有整理過程時(shí),虛擬機(jī)將采用指針碰撞的方式;當(dāng)垃圾收集器的回收過程沒有整理過程時(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)存中開始,到卸載出內(nèi)存為止,它的整個(gè)生命周期包括:加載、驗(yàn)證、準(zhǔn)備、解析、初始化、使用和卸載七個(gè)階段。
  4、Java虛擬機(jī)分配過程中如何解決線程安全?
  答:兩種方式: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,可以通過-XX:+/-UseTLAB參數(shù)來設(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ī)中主流的訪問方式有哪幾種?
  答:有使用句柄和直接指針兩種。使用句柄訪問的最大好處就是reference中存儲(chǔ)的是穩(wěn)定的句柄地址,使用直接指針訪問的最大好處就是速度更快,節(jié)省了一次指針定位的時(shí)間開銷。
 

免責(zé)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認(rèn)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請(qǐng)發(fā)送郵件至:operations@xinnet.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

免費(fèi)咨詢獲取折扣

Loading