成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

java程序的三種基本結(jié)構(gòu) 如何準(zhǔn)確理解Java中的堆與棧?

如何準(zhǔn)確理解Java中的堆與棧?謝邀!Java運(yùn)行時(shí)數(shù)據(jù)區(qū)中的棧有Java虛擬機(jī)棧和本地方法棧,都是用于方法的執(zhí)行;堆用于存放對(duì)象實(shí)例和數(shù)組。Java虛擬機(jī)棧 每個(gè)Java方法執(zhí)行的時(shí)候都會(huì)創(chuàng)建一個(gè)

如何準(zhǔn)確理解Java中的堆與棧?

謝邀!

Java運(yùn)行時(shí)數(shù)據(jù)區(qū)中的棧有Java虛擬機(jī)棧和本地方法棧,都是用于方法的執(zhí)行;堆用于存放對(duì)象實(shí)例和數(shù)組。

Java虛擬機(jī)棧

每個(gè)Java方法執(zhí)行的時(shí)候都會(huì)創(chuàng)建一個(gè)棧幀,棧幀用于存儲(chǔ)局部變量表、操作數(shù)棧、動(dòng)態(tài)鏈表和方法出口等信息,每個(gè)Java方法從開(kāi)始調(diào)用到執(zhí)行完成的過(guò)程,都對(duì)應(yīng)著一個(gè)棧幀在Java虛擬機(jī)棧中入棧到出棧的過(guò)程。在Java虛擬機(jī)規(guī)范中規(guī)定,如果線程請(qǐng)求的深度大于虛擬機(jī)所允許的深度,將拋出StackOverflowError異常;如果虛擬機(jī)可以動(dòng)態(tài)擴(kuò)展,但是在擴(kuò)展時(shí)申請(qǐng)不到足夠的內(nèi)存,將會(huì)拋出OutOfMemoryError異常。Java虛擬機(jī)棧的生存周期是跟隨線程的,是線程私有的。

本地方法棧

Java虛擬機(jī)棧是為執(zhí)行Java方法服務(wù)的,而本地方法棧是為執(zhí)行本地方法服務(wù)的,它的作用與Java虛擬機(jī)棧相似,同樣它也會(huì)拋出StackOverflowError異常和OutOfMemoryError異常。本地方法棧的生存周期也是跟隨線程的,也是線程私有的。

堆是Java虛擬機(jī)中內(nèi)存空間最大的一塊,基本上所有的對(duì)象實(shí)例及數(shù)組都在這里分配內(nèi)存空間,它是所有線程共享的區(qū)域。在Java虛擬機(jī)規(guī)范中,堆可以處于物理上不連續(xù)的內(nèi)存空間,只要邏輯上連續(xù)就行。當(dāng)堆中沒(méi)有足夠內(nèi)存分配時(shí),并且此時(shí)也無(wú)法再擴(kuò)展,將會(huì)拋出OutOfMemoryError異常。

jvm:java代碼是如何運(yùn)行的?

一、Java代碼運(yùn)行流程

A、基本流程

一個(gè)Java項(xiàng)目,包含很多的「.java」為后綴的源代碼文件,除去IDE里直接執(zhí)行調(diào)試,一般來(lái)說(shuō),都是把代碼打成jar包,或者是war包,最后將打包好的jar包或是war包傳到線上服務(wù)器部署。

部署方式很多,最基本的一種是通過(guò)Tomcat容器來(lái)部署,也可以是自己手動(dòng)通過(guò)java命令來(lái)運(yùn)行一個(gè)jar包中的代碼。

B、編譯

上述流程中有一個(gè)非常關(guān)鍵的點(diǎn),「編譯」。

在java代碼打包的過(guò)程中,一般會(huì)把源代碼編譯成「.class」后綴的字節(jié)碼文件。只有字節(jié)碼文件class才能被JVM識(shí)別并解釋運(yùn)行。

C、JVM進(jìn)程

對(duì)于編譯好的class字節(jié)碼,需要使用諸如java -jar之類的命令來(lái)運(yùn)行寫(xiě)好的代碼;一旦使用java命令,實(shí)際上此時(shí)就會(huì)啟動(dòng)一個(gè)JVM進(jìn)程。

JVM進(jìn)程會(huì)負(fù)責(zé)運(yùn)行這些class字節(jié)碼文件,也就相當(dāng)于負(fù)責(zé)運(yùn)行我們寫(xiě)好的代碼。

D、類加載

JVM要運(yùn)行這些class字節(jié)碼文件中的代碼,會(huì)采用類加載器把編譯好的class字節(jié)碼文件加載進(jìn)JVM內(nèi)存中

E、解釋執(zhí)行

最后JVM會(huì)基于自己的字節(jié)碼執(zhí)行引擎,來(lái)執(zhí)行加載到內(nèi)存里的類。當(dāng)JVM需要哪個(gè)類時(shí),會(huì)使用類加載器來(lái)加載對(duì)應(yīng)的類。