卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

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

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

如何準確理解Java中的堆與棧?

謝邀!

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

Java虛擬機棧

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

本地方法棧

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

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

jvm:java代碼是如何運行的?

一、Java代碼運行流程

A、基本流程

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

部署方式很多,最基本的一種是通過Tomcat容器來部署,也可以是自己手動通過java命令來運行一個jar包中的代碼。

B、編譯

上述流程中有一個非常關鍵的點,「編譯」。

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

C、JVM進程

對于編譯好的class字節(jié)碼,需要使用諸如java -jar之類的命令來運行寫好的代碼;一旦使用java命令,實際上此時就會啟動一個JVM進程。

JVM進程會負責運行這些class字節(jié)碼文件,也就相當于負責運行我們寫好的代碼。

D、類加載

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

E、解釋執(zhí)行

最后JVM會基于自己的字節(jié)碼執(zhí)行引擎,來執(zhí)行加載到內(nèi)存里的類。當JVM需要哪個類時,會使用類加載器來加載對應的類。