Java虛擬機(jī)學(xué)習(xí)筆記:為什么Java的跨平臺(tái)性好啤覆?

》目錄

1.JDK、JRE惭聂、JVM三者的關(guān)系是什么窗声。

2.為什么Java要在虛擬機(jī)里運(yùn)行?

3.Java虛擬機(jī)是怎么執(zhí)行一段Java程序的辜纲?

4.Java虛擬機(jī)將Java字節(jié)碼翻譯成機(jī)器碼的形式有哪兩種笨觅?

5.為什么說Java的跨平臺(tái)性好?

6.Java是面向?qū)ο笳Z言耕腾,為什么要引入基本數(shù)據(jù)類型见剩?


》解答

1.JDK、JRE扫俺、JVM三者的關(guān)系是什么苍苞?

JDK(Java開發(fā)工具包)包含JRE(Java運(yùn)行時(shí)環(huán)境)及一系列開發(fā)、診斷工具,JRE包含運(yùn)行Java程序的必需組件:JVM(Java虛擬機(jī))以及Java核心類庫等羹呵。

簡(jiǎn)言之骂际,JDK>JRE>JVM


2.為什么Java要在虛擬機(jī)里運(yùn)行冈欢?

1)可以輕松實(shí)現(xiàn)Java的跨平臺(tái)運(yùn)行歉铝,“一次編寫,到處運(yùn)行”凑耻。(即.java編譯成.class太示,.class就是可以在JVM上運(yùn)行的Java字節(jié)碼)

2)提供了托管環(huán)境,提供內(nèi)存管理拳话、垃圾回收等功能先匪,這些部分都比較冗長(zhǎng)且容易出錯(cuò)。

3)能使編程工作更輕松弃衍,編程人員只需要關(guān)注和業(yè)務(wù)相關(guān)的程序邏輯的編寫呀非,其它業(yè)務(wù)無關(guān)但是也同樣重要的事情由JVM來處理,如數(shù)組越界镜盯、動(dòng)態(tài)類型岸裙、安全權(quán)限等等的動(dòng)態(tài)檢測(cè)。


3.Java虛擬機(jī)是怎么執(zhí)行一段Java程序的速缆?

1)將由這段Java程序編譯而成的Java字節(jié)碼文件(即.class文件)加載到Java虛擬機(jī)中降允,虛擬機(jī)會(huì)將它放在方法區(qū)中,實(shí)際運(yùn)行時(shí)虛擬機(jī)會(huì)執(zhí)行方法區(qū)內(nèi)的代碼艺糜。

2)當(dāng)調(diào)用進(jìn)入一個(gè)方法剧董,JVM會(huì)在當(dāng)前線程的Java方法棧中生成一個(gè)棧幀(Java虛擬機(jī)將內(nèi)存分為堆、棧破停、方法區(qū)翅楼,其中棧由分為面向Java方法的Java方法棧,面向本地方法的本地方法棧真慢,以及存放各個(gè)線程執(zhí)行位置的PC寄存器毅臊,如下圖所示),存放局部變量黑界、字節(jié)碼的操作數(shù)等等(這里的局部變量是廣義的管嬉,除了普遍意義下的局部變量外,還包括實(shí)例方法的“this指針”朗鸠,以及方法所接收的參數(shù))蚯撩。

Java虛擬機(jī)的內(nèi)存劃分

3)退出執(zhí)行當(dāng)前方法時(shí),彈出當(dāng)前棧幀烛占,并將其舍棄求厕。


4.Java虛擬機(jī)將Java字節(jié)碼翻譯成機(jī)器碼的形式有哪兩種?

解釋執(zhí)行即時(shí)編譯

解釋執(zhí)行是翻譯一條執(zhí)行一條呀癣,即時(shí)編譯是將一個(gè)方法中包含的所有Java字節(jié)碼翻譯成機(jī)器碼后再執(zhí)行美浦。

解釋執(zhí)行不需要等待JVM將所有Java字節(jié)碼翻譯成機(jī)器碼的這一段時(shí)間,執(zhí)行到哪一句翻譯哪一句项栏;即時(shí)編譯雖然需要等待這個(gè)整體翻譯的過程浦辨,但在后續(xù)的實(shí)際運(yùn)行中運(yùn)行速度更快。

HotSpot(標(biāo)準(zhǔn)JDK中的JVM)采用混合模式沼沈,結(jié)合了兩種方式的優(yōu)點(diǎn)流酬,先進(jìn)行解釋執(zhí)行,然后對(duì)其中的熱點(diǎn)代碼以方法為單位進(jìn)行即時(shí)編譯列另。

為了不干擾應(yīng)用的正常運(yùn)行芽腾,HotSpot的即時(shí)編譯是放在額外的編譯線程中進(jìn)行的。


5.為什么說Java的跨平臺(tái)性好页衙?

這個(gè)問題我看完文章后思考了很久不得解摊滔,又看了看其他博主的文章,忽然恍然大悟店乐。

跨平臺(tái)性指的是編譯后的文件跨平臺(tái)艰躺,而不是說源程序跨平臺(tái),若是源程序跨平臺(tái)眨八,則所有語言的源程序都是跨平臺(tái)的腺兴。

如VC將標(biāo)準(zhǔn)C開發(fā)的程序編譯成exe文件,可以在windows下運(yùn)行廉侧,但不能在linux下運(yùn)行页响;linux下gcc編譯生成的可執(zhí)行文件可以在linux下執(zhí)行但不能在windows下執(zhí)行。

而Java將源程序編譯成中間碼段誊,即Java字節(jié)碼闰蚕,又即.class文件,不論在什么平臺(tái)上枕扫,只要有Java虛擬機(jī)陪腌,.class文件就可以在虛擬機(jī)上運(yùn)行辱魁,運(yùn)行時(shí)它會(huì)被進(jìn)一步翻譯成機(jī)器可識(shí)別的機(jī)器碼烟瞧。

再說一說各種語言,根據(jù)執(zhí)行方式的不同染簇,原先有兩種:1)編譯執(zhí)行参滴,一次性由特定的編譯器編譯成可以在特定平臺(tái)上運(yùn)行的可執(zhí)行文件,優(yōu)點(diǎn)是執(zhí)行速度快锻弓,缺點(diǎn)是無法跨平臺(tái)砾赔。2)解釋執(zhí)行,將源程序解釋成機(jī)器碼,解釋一句執(zhí)行一句暴心,類似于同聲翻譯妓盲,優(yōu)點(diǎn)是跨平臺(tái)性好,缺點(diǎn)是執(zhí)行速度慢专普,暴露源程序悯衬。

后來Java就引入了“中間碼+虛擬機(jī)”的方式,結(jié)合了編譯執(zhí)行和解釋執(zhí)行的優(yōu)點(diǎn)檀夹,而且虛擬機(jī)又可以進(jìn)行自動(dòng)內(nèi)存管理垃圾回收安全檢測(cè)等等蜓谋,棒棒噠束铭!

參考:Java跨平臺(tái)性的理解


6.Java是面向?qū)ο笳Z言,為什么要引入基本數(shù)據(jù)類型蚌堵?

因?yàn)槭褂没绢愋湍軌蛟?b>執(zhí)行效率和內(nèi)存使用兩方面提升軟件性能买决。

Java的基本類型都有對(duì)應(yīng)的值域和默認(rèn)值,如下圖所示:

Java基本數(shù)據(jù)類型

其中辰斋,上文我們有提到策州,在調(diào)用某個(gè)方法時(shí),虛擬機(jī)會(huì)在Java方法棧中生成一個(gè)棧幀宫仗,存放局部變量和字節(jié)碼的操作數(shù)够挂。

其中,boolean藕夫、byte孽糖、short、int這四種類型在棧上占用的空間和int是一樣的(在32位的HotSpot中是4個(gè)字節(jié)毅贮,在64位的HotSpot中是8個(gè)字節(jié))办悟,它們會(huì)被當(dāng)成int類型來計(jì)算(如boolean的true就是1,false就是0)滩褥。當(dāng)然這種情況僅存在于局部變量病蛉,存儲(chǔ)于堆中的元素占用的空間和它們自身類型的大小還是一致的。

而long瑰煎、float铺然、double則會(huì)按各自的大小來加載,按自身類型來計(jì)算酒甸,而不是像上面四種類型的數(shù)據(jù)一樣被當(dāng)成int型數(shù)據(jù)來計(jì)算魄健。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市插勤,隨后出現(xiàn)的幾起案子沽瘦,更是在濱河造成了極大的恐慌革骨,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件析恋,死亡現(xiàn)場(chǎng)離奇詭異良哲,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)助隧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門臂外,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人喇颁,你說我怎么就攤上這事漏健。” “怎么了橘霎?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵蔫浆,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我姐叁,道長(zhǎng)瓦盛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任外潜,我火速辦了婚禮原环,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘处窥。我一直安慰自己嘱吗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布滔驾。 她就那樣靜靜地躺著谒麦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哆致。 梳的紋絲不亂的頭發(fā)上绕德,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音摊阀,去河邊找鬼耻蛇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛胞此,可吹牛的內(nèi)容都是我干的臣咖。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼豌鹤,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼亡哄!你這毒婦竟也來了枝缔?” 一聲冷哼從身側(cè)響起布疙,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤蚊惯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后灵临,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體截型,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年儒溉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宦焦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡顿涣,死狀恐怖波闹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情涛碑,我是刑警寧澤精堕,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站蒲障,受9級(jí)特大地震影響歹篓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜揉阎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一庄撮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧毙籽,春花似錦洞斯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至垮衷,卻和暖如春厅翔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背搀突。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國打工刀闷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人仰迁。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓甸昏,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親徐许。 傳聞我的和親對(duì)象是個(gè)殘疾皇子施蜜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容