:湖南長沙北大青鳥長沙大計(jì)教育,成立于2006年,湖南長沙IT學(xué)校排名領(lǐng)先品牌,學(xué)校依托了北京大學(xué)雄厚的技術(shù)資源,專注于職業(yè)教育,也是我國中南地區(qū)Java軟件工程師的人才搖籃。 初高中生班,大專本科班全面招生中 長沙北大青鳥大計(jì)教育就在杜鵑路 北大青鳥長沙校區(qū)選長沙大計(jì)教育,選學(xué)一門,學(xué)通學(xué)透,求學(xué)電話:4008-0731-86" />
來源:長沙北大青鳥大計(jì)教育|發(fā)布時(shí)間:2020-07-19 18:23:25
摘要:湖南長沙北大青鳥長沙大計(jì)教育,成立于2006年,湖南長沙IT學(xué)校排名領(lǐng)先品牌,學(xué)校依托了北京大學(xué)雄厚的技術(shù)資源,專注于職業(yè)教育,也是我國中南地區(qū)Java軟件工程師的人才搖籃。 初高中生班,大專本科班全面招生中 長沙北大青鳥大計(jì)教育就在杜鵑路 北大青鳥長沙校區(qū)選長沙大計(jì)教育,選學(xué)一門,學(xué)通學(xué)透,求學(xué)電話:4008-0731-86
拓展閱讀:
長沙北大青鳥哪家最好
北大青鳥長沙分校
長沙北大青鳥學(xué)?煽繂
長沙北大青鳥學(xué)校怎么樣
長沙北大青鳥學(xué)費(fèi)一覽表
【java虛擬機(jī) JVM詳解 內(nèi)部原理 (小白必看)】
正文:一.什么是JVM?了解什么是JVM之前先簡單說下什么是Java?,啥是Java很難用一句話來概括,我們從四個(gè)方面來闡述. 語言:作為世界上最流行的編程語言,Java可以編寫C/S、B/S模式的軟件。語法由JavaLanguageSpecification規(guī)定。 平臺(tái):作為一個(gè)開發(fā)平臺(tái),以JVM為基礎(chǔ),除Java外還有Groovy,Scala,Kotlin,JRuby,Clojure,Jython等語言。虛擬機(jī)內(nèi)部機(jī)制由JavaVirtualMachineSpecification規(guī)定。 文化:作為一種文化,Java幾乎成為可“開源”的代名詞. 生態(tài):作為生態(tài),Java擁有世界最多的技術(shù)擁護(hù)者和開源社區(qū)的支持。從桌面應(yīng)用軟件、嵌入式開發(fā)到企業(yè)級(jí)應(yīng)用、后臺(tái)服務(wù)、中間件都可以看到Java的身影.大家學(xué)習(xí)Java的過程中,相信都會(huì)有了解到JDK和JRE這兩個(gè)東西,我們要講的JVM就屬于JRE當(dāng)中的.為什么叫做虛擬機(jī)呢?(如下圖所示:)因?yàn)閖ava程序是在java虛擬機(jī)中運(yùn)行,通過JVM來對(duì)class文件進(jìn)行翻譯給操作系統(tǒng)執(zhí)行,官方提供了不同操作系統(tǒng)上的JVM.在這里JVM相當(dāng)于充當(dāng)了翻譯官的角色,也使java有跨平臺(tái)這個(gè)特性.[C語言、匯編語言等古老的語言不能跨平臺(tái)],也對(duì)應(yīng)了它的口號(hào)“一次編譯,到處執(zhí)行”.二.JVM有什么作用? JVM由三個(gè)主要部件構(gòu)成: ①類加載器②運(yùn)行時(shí)數(shù)據(jù)區(qū)③執(zhí)行引擎(1)類加載器[ClassLoader]: 它負(fù)責(zé)在運(yùn)行時(shí)查找和裝入類文件的類,JVM里有多個(gè)類加載器,每個(gè)類加載器負(fù)責(zé)加載特定位置的類.(如下圖:)例如 引導(dǎo)類加載器(bootstrap):負(fù)責(zé)加載jre/lib/rt.jar中的類 擴(kuò)展類加載器(extclassloader):負(fù)責(zé)加載jre/lib/ext/*.jar中的類 系統(tǒng)類加載器(appclassloader):負(fù)責(zé)classspath指定的目錄或jar中的類為什么要分成不同的類加載器呢?主要為了安全性,打個(gè)比方如果一個(gè)有惡意class文件類并且路徑偽裝下,它要被加載的話首先會(huì)通過系統(tǒng)類加載器進(jìn)行加載,加載器發(fā)現(xiàn)此類不符它的加載范圍,會(huì)給它上一級(jí)擴(kuò)展類加載器,因?yàn)槊總(gè)加載器都有特定的加載范圍,到最后這個(gè)類都不符合.就算在系統(tǒng)類加載器中加載了,也不會(huì)影響到JVM主要的類文件.1(2)運(yùn)行時(shí)數(shù)據(jù)區(qū)[RuntimeDataArea]: Java虛擬機(jī)在執(zhí)行Java程序的過程中會(huì)把它管理的內(nèi)存劃分為若干個(gè)不同的數(shù)據(jù)區(qū)域.(如下圖:)主要分為五大區(qū)域塊: 方法區(qū)(MethodArea):這是一塊公共區(qū)域,它存放一些加載后的類信息(有類的版本、字段、方法、接口等描述信息)、常量、靜態(tài)變量等信息.Java虛擬機(jī)規(guī)范規(guī)定,當(dāng)方法區(qū)無法滿足內(nèi)存分配的需求時(shí),將拋出OutOfMemoryError異常。 堆區(qū)(HeapArea):堆也是被所有線程共享的一塊區(qū)域,在JVM啟動(dòng)時(shí)創(chuàng)建,它存放對(duì)象實(shí)例,幾乎所有的對(duì)象實(shí)例都在這里分配內(nèi)存,這塊區(qū)域也是GC(垃圾回收機(jī)制)重點(diǎn)清理的區(qū)域,當(dāng)堆中的內(nèi)存無法分配給示例時(shí),會(huì)拋出OutOfMemoryError異常。 虛擬機(jī)棧(VMStack):它描述的是Java方法執(zhí)行的內(nèi)存模型,當(dāng)執(zhí)行一個(gè)方法時(shí)會(huì)創(chuàng)建一個(gè)棧幀,棧幀用于存儲(chǔ)局部變量表、操作數(shù)棧、動(dòng)態(tài)鏈接、方法出口等信息,基本變量和對(duì)象的引用變量都存放于此.棧中執(zhí)行順序是“后入先出(LIFO)”這里打個(gè)比方:當(dāng)一個(gè)Main方法調(diào)用另A方法,這時(shí)會(huì)創(chuàng)建兩個(gè)棧幀先執(zhí)行的Main方法會(huì)最后出這個(gè)棧,而A方法執(zhí)行完后會(huì)先出棧,則A方法被銷毀.總的來說一個(gè)方法的入棧出棧就表示著一個(gè)方法從調(diào)用到執(zhí)行完成的過程,棧是線程私有的,它的生命周期與線程相同,Java虛擬機(jī)規(guī)范對(duì)這個(gè)區(qū)域規(guī)定了兩種異常情況: ①如果線程請(qǐng)求的棧深度大于虛擬機(jī)所允許的深度,將拋出StackOverflowError異常 ②如果虛擬機(jī)?梢詣(dòng)態(tài)擴(kuò)展,如果擴(kuò)展時(shí)無法申請(qǐng)到足夠的內(nèi)存,就會(huì)拋出OutOfMemoryError異常.(當(dāng)前大部分JVM都可以動(dòng)態(tài)擴(kuò)展,只不過JVM規(guī)范也允許固定長度的虛擬機(jī)棧) 程序計(jì)數(shù)器(ProgramCounterRegister):首先它是線程私有區(qū)域,它存儲(chǔ)或說記錄當(dāng)前線程之前執(zhí)行的任務(wù)狀態(tài),等線程搶到CPU時(shí)間片時(shí),繼續(xù)未完成的任務(wù).[也稱為PC寄存器] 本地方法棧(NativeMethodStack):用于JNT調(diào)用等,.JNI技術(shù),java調(diào)用c語言等其它語言開發(fā)的函數(shù),本地方法棧中也會(huì)拋出StackOverflowError和OutOfMemory異常.該區(qū)域不受GC所管制.[運(yùn)行時(shí)數(shù)據(jù)區(qū)圖:][方法區(qū)示意圖:][虛擬機(jī)棧圖:][棧幀出入示意圖:](3)執(zhí)行引擎[RuntimeDataArea]:(如下圖所示)執(zhí)行引擎將字節(jié)碼分配給運(yùn)行時(shí)數(shù)據(jù)區(qū),執(zhí)行引擎讀取字節(jié)碼并逐段執(zhí)行.其中圖中的本地接口(JNI):JNI會(huì)與本地方法庫進(jìn)行交互并提供執(zhí)行引擎所需的本地庫。本地方法庫:它是一個(gè)執(zhí)行引擎所需的本地庫的集合。下面咱們來看一段代碼:publicclassTest1{publicstaticintnum=1;//類變量會(huì)存放在方法區(qū)中publicvoidmethod1(){/*在這個(gè)方法中創(chuàng)建了一個(gè)對(duì)象,但是會(huì)在內(nèi)存中產(chǎn)生兩個(gè)相關(guān)數(shù)據(jù).我們知道等號(hào)左邊的對(duì)象是等號(hào)右邊的一個(gè)引用,左邊的引用是存放在此方法棧幀中的,而右邊的Test2則是一個(gè)實(shí)例對(duì)象,所以它存放在堆區(qū)中.* /Test2test2=newTest2();}}123456789101112相信看到這里大家對(duì)JVM有了一個(gè)初步的了解,在我們遇到的所有java問題都可以追溯到JVM中.今天的分享就到這里,后續(xù)還會(huì)繼續(xù)更新相關(guān)內(nèi)容,感謝大家!————————————————版權(quán)聲明:本文為CSDN博主
全程面授,不高薪都難
申請(qǐng)成功后,我們將在24小時(shí)內(nèi)與您聯(lián)系
招生熱線: 4008-0731-86 / 0731-82186801
學(xué)校地址: 長沙市天心區(qū)團(tuán)結(jié)路6號(hào)
Copyright © 2006 | 湖南大計(jì)信息科技有限公司 版權(quán)所有
湘ICP備14017520號(hào)-3