欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Java虛擬機(jī)的體系結(jié)構(gòu)和內(nèi)存模型是什么

這篇文章主要介紹“Java虛擬機(jī)的體系結(jié)構(gòu)和內(nèi)存模型是什么”,在日常操作中,相信很多人在Java虛擬機(jī)的體系結(jié)構(gòu)和內(nèi)存模型是什么問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Java虛擬機(jī)的體系結(jié)構(gòu)和內(nèi)存模型是什么”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

專注于為中小企業(yè)提供網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)遼陽(yáng)縣免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千多家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

Java 虛擬機(jī)體系結(jié)構(gòu)

Java虛擬機(jī)的體系結(jié)構(gòu)和內(nèi)存模型是什么

類裝載子系統(tǒng)

Java虛擬機(jī)有兩種類裝載器,分別是啟動(dòng)類裝載器和用戶自定義裝載器。

通類裝載子系統(tǒng)通過類的全限定名(包名和類名,網(wǎng)絡(luò)裝載還包括 URL)將 Class  裝載進(jìn)運(yùn)行時(shí)數(shù)據(jù)區(qū)。對(duì)于每一個(gè)被裝載的類型,Java虛擬機(jī)都會(huì)創(chuàng)建一個(gè)java.lang.Class類的實(shí)例來代表該類型,該實(shí)例被放在內(nèi)存中的堆 區(qū),而裝載的類型信息則位于方法區(qū),這一點(diǎn)和所有其他對(duì)象都是一樣的。

類裝載子系統(tǒng)在裝載一個(gè)類型前,除了要定位和導(dǎo)入對(duì)應(yīng)的二進(jìn)制class文件外,還要驗(yàn)證導(dǎo)入類的正確性,為類變量分配并初始化內(nèi)存,以及解析符號(hào)引用為直接引用,這些動(dòng)作嚴(yán)格按照以下順序進(jìn)行:

1)裝載——查找并裝載類型的二進(jìn)制數(shù)據(jù);

2)連接——執(zhí)行驗(yàn)證,準(zhǔn)備以及解析(可選)

3)驗(yàn)證 確保被導(dǎo)入類型的正確性

4)準(zhǔn)備 為類變量分配內(nèi)存,并將其初始化為默認(rèn)值

5)解析 把類型中的符號(hào)引用轉(zhuǎn)換為直接應(yīng)用

方法區(qū)

對(duì)于每一個(gè)被類裝載子系統(tǒng)裝載的類型,虛擬機(jī)都會(huì)保存下列數(shù)據(jù)到方法區(qū):

  • 類型的全限定名

  • 類型超類的全限定名(java.lang.Object沒有超類)

  • 類型是類類型還是接口類型

  • 類型的訪問修飾符

  • 任何直接超接口的全限定名有序列表

除了上述基本類型信息,還將保存如下信息:

  • 類型的常量池

  • 字段信息(包括字段名、字段類型、字段修飾符)

  • 方法信息(包括方法名、返回類型、參數(shù)的數(shù)量和類型、方法修飾符,如果方法不是抽象和本地的,還將保存方法的字節(jié)碼、操作數(shù)棧和該方法棧幀中的局部變量區(qū)的大小和異常表)

  • 常量以外的所有類變量(其實(shí)就是類的靜態(tài)變量,因?yàn)殪o態(tài)變量是所有實(shí)例共享的,且與類型直接相關(guān),所以他們是類一級(jí)的變量,作為類的成員被保存在方法區(qū))

一個(gè)到類ClassLoader的引用

//返回的就是剛才保存的ClassLoader引用  
String.class.getClassLoader();

一個(gè)到Class類的引用

//將返回剛才保存的Class類的引用  
String.class;

注意,方法區(qū)也是可以被垃圾回收器回收的。

Java程序在運(yùn)行時(shí)創(chuàng)建的所有類實(shí)例或數(shù)組都放在同一個(gè)堆中,而每一個(gè)Java虛擬機(jī)也是有一個(gè)對(duì)空間,所有線程共享一個(gè)堆(這就是一個(gè)多線程的Java程序會(huì)產(chǎn)生對(duì)象訪問的同步問題的原因了)。

由于每一種Java虛擬機(jī)都有對(duì)虛擬機(jī)規(guī)范的不同實(shí)現(xiàn),所以我們可能不知道每一種Java虛擬機(jī)在堆中是以何種形式表示對(duì)象實(shí)例的,不過我們可以通過下面這可能的實(shí)現(xiàn)來一窺端倪:

Java虛擬機(jī)的體系結(jié)構(gòu)和內(nèi)存模型是什么

程序計(jì)數(shù)器

對(duì)于運(yùn)行中的Java程序而言,每一個(gè)線程都有自己的PC(程序計(jì)數(shù)器)寄存器,它是在該線程啟動(dòng)時(shí)創(chuàng)建的,大小為一個(gè)字長(zhǎng),用來保存需要被執(zhí)行的下一行代碼的位置。

Java棧

每一個(gè)線程都有一個(gè)Java棧,以棧幀為單位保存線程的運(yùn)行狀態(tài)。虛擬機(jī)對(duì)Java棧的操作有兩種:壓棧和出棧,二者都已幀為單位。棧幀保存了傳入?yún)?shù)、局部變量、中間運(yùn)算結(jié)果等數(shù)據(jù),在方法完成時(shí)被彈出,然后釋放。

看一下兩個(gè)局部變量相加時(shí)棧幀的內(nèi)存快照

Java虛擬機(jī)的體系結(jié)構(gòu)和內(nèi)存模型是什么

本地方法棧

這是 Java 調(diào)用操作系統(tǒng)本地庫(kù)的地方,用來實(shí)現(xiàn) JNI(Java Native Interface,Java 本地接口)

執(zhí)行引擎

Java虛擬機(jī)的核心,控制裝入 Java 字節(jié)碼并解析;對(duì)于運(yùn)行中的Java程序而言,每一個(gè)線程都是一個(gè)獨(dú)立的虛擬機(jī)執(zhí)行引擎的實(shí)例,從線程生命周期的開始到結(jié)束,他要么在執(zhí)行字節(jié)碼,要么在執(zhí)行本地方法。

本地接口

連接了本地方法棧和操作系統(tǒng)庫(kù)。

注:文中所有提到”Java虛擬機(jī)”的地方都是指”JavaEE和JavaSE平臺(tái)的Java虛擬機(jī)規(guī)范”。

到此,關(guān)于“Java虛擬機(jī)的體系結(jié)構(gòu)和內(nèi)存模型是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

分享題目:Java虛擬機(jī)的體系結(jié)構(gòu)和內(nèi)存模型是什么
地址分享:http://chinadenli.net/article22/ihoccc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作標(biāo)簽優(yōu)化網(wǎng)站設(shè)計(jì)靜態(tài)網(wǎng)站網(wǎng)站設(shè)計(jì)公司定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)