日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

JVM學(xué)習(xí)筆記(一):運(yùn)行時數(shù)據(jù)區(qū)

系統(tǒng) 1900 0

運(yùn)行時數(shù)據(jù)區(qū)

?

java 虛擬機(jī)定義了若干種程序運(yùn)行時使用到的運(yùn)行時數(shù)據(jù)區(qū)

1.有一些是 ? 隨虛擬機(jī)的啟動而創(chuàng)建,隨虛擬機(jī)的退出而銷毀

2.第二種則是與線程一一對應(yīng),隨線程的開始和結(jié)束而創(chuàng)建和銷毀。

java 虛擬機(jī)所管理的內(nèi)存將會包括以下幾個運(yùn)行時數(shù)據(jù)區(qū)域

?

PC 寄存器

也叫程序計(jì)數(shù)器( Program Counter Register )是一塊較小的內(nèi)存空間,它的作用可以看做是當(dāng)前線程所執(zhí)行的字節(jié)碼的信號指示器。

每一條 JVM 線程都有自己的 PC 寄存器

在任意時刻,一條 JVM 線程只會執(zhí)行一個方法的代碼。該方法稱為該線程的當(dāng)前方法( Current Method

如果該方法是 java 方法,那 PC 寄存器保存 JVM 正在執(zhí)行的字節(jié)碼指令的地址

如果該方法是 native ,那 PC 寄存器的值是 undefined

此內(nèi)存區(qū)域是唯一一個在 Java 虛擬機(jī)規(guī)范中沒有規(guī)定任何 OutOfMemoryError 情況的區(qū)域。

?

Java 虛擬機(jī)棧

PC 寄存器一樣, java 虛擬機(jī)棧 Java Virtual Machine Stack )也是線程私有的。每一個 JVM 線程都有自己的 java 虛擬機(jī)棧,這個棧與線程同時創(chuàng)建,它的生命周期與線程相同。

虛擬機(jī)棧描述的是 Java 方法執(zhí)行的內(nèi)存模型:每個方法被執(zhí)行的時候都會同時創(chuàng)建一個棧幀( Stack Frame )用于存儲局部變量表、操作數(shù)棧、動態(tài)鏈接、方法出口等信息。每一個方法被調(diào)用直至執(zhí)行完成的過程就對應(yīng)著一個棧幀在虛擬機(jī)棧中從入棧到出棧的過程。

JVM stack 可以被實(shí)現(xiàn)成固定大小,也可以根據(jù)計(jì)算動態(tài)擴(kuò)展。

如果采用固定大小的 JVM stack 設(shè)計(jì),那么每一條線程的 JVM Stack 容量應(yīng)該在線程創(chuàng)建時獨(dú)立地選定。 JVM 實(shí)現(xiàn)應(yīng)該提供調(diào)節(jié) JVM Stack 初始容量的手段。

如果采用動態(tài)擴(kuò)展和收縮的 JVM Stack 方式,應(yīng)該提供調(diào)節(jié)最大、最小容量的手段。

?

JVM Stack 異常情況:

StackOverflowError :當(dāng)線程請求分配的棧容量超過 JVM 允許的最大容量時拋出

OutOfMemoryError :如果 JVM Stack 可以動態(tài)擴(kuò)展,但是在嘗試擴(kuò)展時無法申請到足夠的內(nèi)存去完成擴(kuò)展,或者在建立新的線程時沒有足夠的內(nèi)存去創(chuàng)建對應(yīng)的虛擬機(jī)棧時拋出。

?

Java

JVM 中,堆( heap )是可供各條 線程共享 的運(yùn)行時內(nèi)存區(qū)域,也是供所有類實(shí)例和數(shù)據(jù)對象分配內(nèi)存的區(qū)域。

Java 堆載虛擬機(jī)啟動的時候就被創(chuàng)建,堆中儲存了各種對象,這些對象被自動管理內(nèi)存系統(tǒng)( Automatic Storage Management System ,也即是常說的 “Garbage Collector (垃圾回收器) )所管理。這些對象無需、也無法顯示地被銷毀。

Java 堆的容量可以是固定大小,也可以隨著需求動態(tài)擴(kuò)展,并在不需要過多空間時自動收縮。

Java 堆所使用的內(nèi)存不需要保證是物理連續(xù)的,只要邏輯上是連續(xù)的即可。

JVM 實(shí)現(xiàn)應(yīng)當(dāng)提供給程序員調(diào)節(jié) Java 堆初始容量的手段,對于可動態(tài)擴(kuò)展和收縮的堆來說,則應(yīng)當(dāng)提供調(diào)節(jié)其最大和最小容量的手段。

Java 堆異常:

OutOfMemoryError :如果實(shí)際所需的堆超過了自動內(nèi)存管理系統(tǒng)能提供的最大容量時拋出。

?

方法區(qū)( Method Area

方法區(qū)是可供各條線程共享的運(yùn)行時內(nèi)存區(qū)域。存儲了每一個類的結(jié)構(gòu)信息,例如運(yùn)行時常量池( Runtime Constant Pool )、字段和方法數(shù)據(jù)、構(gòu)造函數(shù)和普通方法的字節(jié)碼內(nèi)容、還包括一些在類、實(shí)例、接口初始化時用到的特殊方法

方法區(qū)在虛擬機(jī)啟動的時候創(chuàng)建。

方法區(qū)的容量可以是固定大小的,也可以隨著程序執(zhí)行的需求動態(tài)擴(kuò)展,并在不需要過多空間時自動收縮。

方法區(qū)在實(shí)際內(nèi)存空間中可以是不連續(xù)的。

Java 虛擬機(jī)實(shí)現(xiàn)應(yīng)當(dāng)提供給程序員或者最終用戶調(diào)節(jié)方法區(qū)初始容量的手段,對于可以動態(tài)擴(kuò)展和收縮方法區(qū)來說,則應(yīng)當(dāng)提供調(diào)節(jié)其最大、最小容量的手段。

Java 方法區(qū)異常:

OutOfMemoryError ? 如果方法區(qū)的內(nèi)存空間不能滿足內(nèi)存分配請求,那 Java 虛擬機(jī)將拋出一個 OutOfMemoryError 異常。

?

運(yùn)行時常量池( Runtime Constant Pool

運(yùn)行時常量池是每一個類或接口的常量池( Constant_Pool )的運(yùn)行時表現(xiàn)形式,它包括了若干種常量:編譯器可知的數(shù)值字面量到必須運(yùn)行期解析后才能獲得的方法或字段的引用。

運(yùn)行時常量池是方法區(qū)的一部分。 每一個運(yùn)行時常量池都分配在 JVM 的方法區(qū)中,在類和接口被加載到 JVM 后,對應(yīng)的運(yùn)行時常量池就被創(chuàng)建。

在創(chuàng)建類和接口的運(yùn)行時常量池時,可能會遇到的異常:

OutOfMemoryError :當(dāng)創(chuàng)建類和接口時,如果構(gòu)造運(yùn)行時常量池所需的內(nèi)存空間超過了方法區(qū)所能提供的最大內(nèi)存空間后就會拋出 OutOfMemoryError

?

本地方法棧

Java 虛擬機(jī)可能會使用到傳統(tǒng)的棧來支持 native 方法(使用 Java 語言以外的其它語言編寫的方法)的執(zhí)行,這個棧就是本地方法棧( Native Method Stack

如果 JVM 不支持 native 方法,也不依賴與傳統(tǒng)方法棧的話,可以無需支持本地方法棧。

如果支持本地方法棧,則這個棧一般會在線程創(chuàng)建的時候按線程分配。

異常情況:

StackOverflowError :如果線程請求分配的棧容量超過本地方法棧允許的最大容量時拋出

OutOfMemoryError :如果本地方法棧可以動態(tài)擴(kuò)展,并且擴(kuò)展的動作已經(jīng)嘗試過,但是目前無法申請到足夠的內(nèi)存去完成擴(kuò)展,或者在建立新的線程時沒有足夠的內(nèi)存去創(chuàng)建對應(yīng)的本地方法棧,那 Java 虛擬機(jī)將會拋出一個 OutOfMemoryError 異常。 ?

JVM學(xué)習(xí)筆記(一):運(yùn)行時數(shù)據(jù)區(qū)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 博乐市| 九江县| 黄陵县| 清水河县| 思茅市| 麻城市| 门头沟区| 崇左市| 庆元县| 丹凤县| 英超| 郧西县| 江永县| 黄陵县| 阿拉善盟| 景泰县| 田林县| 井研县| 莆田市| 玉屏| 抚州市| 沅陵县| 夏河县| 多伦县| 大悟县| 洱源县| 沧源| 新巴尔虎右旗| 博野县| 克山县| 安乡县| 巴南区| 双桥区| 商南县| 阳江市| 双柏县| 东辽县| 来安县| 延边| 文安县| 姚安县|