自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java虛擬機(jī)結(jié)構(gòu):運(yùn)行時(shí)數(shù)據(jù)區(qū)

云計(jì)算 虛擬化
Java虛擬機(jī)可以支持多條線程同時(shí)執(zhí)行,每一條Java虛擬機(jī)線程都有自己的pc寄存器。再任意時(shí)刻,一條Java虛擬機(jī)線程只會(huì)執(zhí)行一個(gè)方法的代碼,這個(gè)正在被線程執(zhí)行的方法稱為該線程的當(dāng)前方法。

 Java虛擬機(jī)可以支持多條線程同時(shí)執(zhí)行,每一條Java虛擬機(jī)線程都有自己的pc寄存器。再任意時(shí)刻,一條Java虛擬機(jī)線程只會(huì)執(zhí)行一個(gè)方法的代碼,這個(gè)正在被線程執(zhí)行的方法稱為該線程的當(dāng)前方法。

如果這個(gè)方法不是native的,那pc寄存器就保存Java虛擬機(jī)正在執(zhí)行的字節(jié)碼指令的地址,如果該方法是native的,那pc寄存器的值是undefined。pc寄存器的容量至少應(yīng)當(dāng)能保存一個(gè)returnAddress類型的數(shù)據(jù)或者一個(gè)與平臺(tái)相關(guān)的本地指針的值。

Java虛擬機(jī)棧

每一條Java虛擬機(jī)線程都有自己私有的Java虛擬機(jī)棧,這個(gè)棧與線程同時(shí)創(chuàng)建,用于存儲(chǔ)棧幀。Java虛擬機(jī)棧用于存儲(chǔ)局部變量與一些尚未算好的結(jié)果。另外它在方法調(diào)用和返回中也扮演了很重要的角色。因?yàn)槌藯某鰲:腿霔V?,Java虛擬機(jī)棧不會(huì)再受其他因素的影響,所以棧幀可以在堆中分配,Java虛擬機(jī)棧所使用的內(nèi)存不需要保證是連續(xù)的。

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

Java虛擬機(jī)棧可能發(fā)生如下異常情況:

  • 如果線程請(qǐng)求分配的棧容量超過Java虛擬機(jī)棧允許的***容量,Java虛擬機(jī)將會(huì)拋出一個(gè)StackOverflowError異常;
  • 如果Java虛擬機(jī)??梢詣?dòng)態(tài)擴(kuò)展,并且在嘗試擴(kuò)展的時(shí)候無法申請(qǐng)到足夠的內(nèi)存,或者在創(chuàng)建新的線程時(shí)沒有足夠的內(nèi)存去創(chuàng)建對(duì)應(yīng)的虛擬機(jī)棧,那Java虛擬機(jī)將會(huì)拋出一個(gè)OutOfMemoryError異常。

Java堆

在Java虛擬機(jī)中,堆是可供各個(gè)線程共享的運(yùn)行時(shí)內(nèi)存區(qū)域, 也是供所有類實(shí)例和數(shù)組對(duì)象分配內(nèi)存的區(qū)域。

Java堆在虛擬機(jī)啟動(dòng)的時(shí)候就被創(chuàng)建,它存儲(chǔ)了被自動(dòng)管理系統(tǒng)(也即常說的垃圾收集器)所管理的各種對(duì)象,這些受管理的對(duì)象無需也無法顯式地銷毀。虛擬機(jī)實(shí)現(xiàn)者可以根據(jù)系統(tǒng)的實(shí)際需要來選擇自動(dòng)內(nèi)存管理技術(shù)。Java堆的容量可以是固定的,也可以隨著程序執(zhí)行的需求動(dòng)態(tài)擴(kuò)展,并在不需要過多空間時(shí)自動(dòng)收縮。Java堆所使用的內(nèi)存不需要保證是連續(xù)的。

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

Java堆可能發(fā)生如下異常:

  • 如果實(shí)際所需的堆超過了自動(dòng)內(nèi)存管理系統(tǒng)能提供的***容量,那Java虛擬機(jī)將會(huì)拋出一個(gè)OutOfMemoryError異常。

方法區(qū)

在Java虛擬機(jī)中,方法區(qū)是可供各個(gè)線程共享的運(yùn)行時(shí)內(nèi)存區(qū)域。方法區(qū)與傳統(tǒng)語言中的編譯代碼存儲(chǔ)區(qū)或者操作系統(tǒng)進(jìn)程的正文段的作用非常相似,它存儲(chǔ)了每一個(gè)類的結(jié)構(gòu)信息,例如,運(yùn)行時(shí)常量池、字段和方法數(shù)據(jù)、構(gòu)造函數(shù)和普通方法的字節(jié)碼內(nèi)容,還包括一些在類、實(shí)例、接口初始化時(shí)用到的特殊方法。

方法區(qū)在虛擬機(jī)啟動(dòng)的時(shí)候創(chuàng)建,雖然方法區(qū)是堆的邏輯組成部分,但是簡(jiǎn)單的虛擬機(jī)實(shí)現(xiàn)可以選擇在這個(gè)區(qū)域不實(shí)現(xiàn)垃圾收集與壓縮。方法區(qū)的容量可以是固定的,也可以隨著程序執(zhí)行的需求動(dòng)態(tài)擴(kuò)展,并在不需要過多空間時(shí)自動(dòng)收縮。方法區(qū)在實(shí)際內(nèi)存空間中可以是不連續(xù)的。

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

方法區(qū)可能發(fā)生如下異常情況:

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

運(yùn)行時(shí)常量池

運(yùn)行時(shí)常量池是class文件中每一個(gè)類或接口的常量池表的運(yùn)行時(shí)表示形式,它包括了若干種不同的常亮,從編譯期可知的數(shù)值字面量到必須在運(yùn)行期解析后才能獲得的方法或字段引用。運(yùn)行時(shí)常量池類似于傳統(tǒng)語言中的符號(hào)表,不過它存儲(chǔ)數(shù)據(jù)的范圍比通常意義上的符號(hào)表要更為廣泛。

每一個(gè)運(yùn)行時(shí)常量池都在Java虛擬機(jī)的方法區(qū)中分配,在加載類和接口到虛擬機(jī)后,就創(chuàng)建對(duì)應(yīng)的運(yùn)行時(shí)常量池。

在創(chuàng)建類和接口的運(yùn)行時(shí)常量池時(shí),可能會(huì)發(fā)生如下異常情況:

  • 當(dāng)創(chuàng)建類或接口時(shí),如果構(gòu)造運(yùn)行時(shí)常亮池所需要的內(nèi)存空間超過了方法區(qū)所能提供的***值,那么Java虛擬機(jī)將會(huì)拋出一個(gè)OutOfMemoryError異常。

本地方法棧

Java虛擬機(jī)實(shí)現(xiàn)可能會(huì)使用到傳統(tǒng)的棧來支持native方法的執(zhí)行,這個(gè)棧就是本地方法棧。當(dāng)Java虛擬機(jī)使用其他語言來實(shí)現(xiàn)指令集解釋器時(shí),也可以使用本地方法棧。如果Java虛擬機(jī)不支持native方法,或是本身不依賴傳統(tǒng)棧,那么可以不提供本地方法棧,如果支持本地方法棧,那這個(gè)棧一般會(huì)在線程創(chuàng)建的時(shí)候按線程分配。

Java虛擬機(jī)規(guī)范允許本地方法棧實(shí)現(xiàn)成固定大小或者根據(jù)計(jì)算來動(dòng)態(tài)擴(kuò)展和收縮。如果采用固定大小的本地方法棧,那么每一個(gè)線程的本地方法棧容量可以在創(chuàng)建棧的時(shí)候獨(dú)立選定。

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

本地方法棧可能發(fā)生如下異常情況:

  • 如果線程請(qǐng)求分配的棧容量超過本地方法棧允許的***容量,Java虛擬機(jī)將會(huì)拋出一個(gè)StackOverflowError異常。
  • 如果本地方法棧可以動(dòng)態(tài)擴(kuò)展,并且在嘗試擴(kuò)展的時(shí)候無法申請(qǐng)到足夠的內(nèi)存,或者在創(chuàng)建新的線程時(shí)沒有足夠的內(nèi)存去創(chuàng)建對(duì)應(yīng)的本地方法棧,那么Java虛擬機(jī)將會(huì)拋出一個(gè)OutOfMemoryError異常。
責(zé)任編輯:武曉燕 來源: wangjinlong
相關(guān)推薦

2018-10-25 09:04:56

Java虛擬機(jī)JVM

2022-03-21 11:07:43

JVM內(nèi)存字節(jié)碼

2021-07-14 07:21:57

JVM運(yùn)行數(shù)據(jù)

2022-01-17 22:09:50

JVM方法區(qū)數(shù)據(jù)

2021-08-13 08:15:23

JVM 虛擬機(jī)Java

2015-07-20 15:44:46

Swift框架MJExtension反射

2024-03-08 08:26:25

類的加載Class文件Java

2021-09-18 08:02:49

Go程序工具

2011-12-28 13:24:47

JavaJVM

2024-03-21 09:15:58

JS運(yùn)行的JavaScrip

2024-11-26 08:31:36

2022-07-03 20:31:59

JVMJava虛擬機(jī)

2024-04-03 13:49:00

Java虛擬機(jī)方法區(qū)

2011-11-30 14:12:05

JavaJVM虛擬機(jī)

2020-11-02 08:54:29

JMMVolatileSynchronize

2019-07-12 09:30:12

DashboardDockerDNS

2021-09-11 15:38:23

容器運(yùn)行鏡像開放

2009-06-12 21:39:48

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

2018-07-31 14:03:09

JVM內(nèi)存數(shù)據(jù)

2010-09-26 13:23:13

JVM內(nèi)存管理機(jī)制
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)