日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
JVM優(yōu)化:虛擬機(jī)棧&本地方法棧

一、什么是虛擬機(jī)棧

Java虛擬機(jī)棧(Java Virtual Machine Stacks)也是線程私有的,即生命周期和線程相同。Java虛擬機(jī)棧和線程同時(shí)創(chuàng) 建,用于存儲(chǔ)棧幀。每個(gè)方法在執(zhí)行時(shí)都會(huì)創(chuàng)建一個(gè)棧幀(Stack Frame),用于存儲(chǔ)局部變量表、操作數(shù)棧、動(dòng)態(tài) 鏈接、方法出口等信息。每一個(gè)方法從調(diào)用直到執(zhí)行完成的過(guò)程就對(duì)應(yīng)著一個(gè)棧幀在虛擬機(jī)棧中從入棧到出棧的過(guò) 程。

成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供彭水苗族土家族網(wǎng)站建設(shè)、彭水苗族土家族做網(wǎng)站、彭水苗族土家族網(wǎng)站設(shè)計(jì)、彭水苗族土家族網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、彭水苗族土家族企業(yè)網(wǎng)站模板建站服務(wù),10年彭水苗族土家族做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

二、什么是棧幀

棧幀(Stack Frame)是用于支持虛擬機(jī)進(jìn)行方法調(diào)用和方法執(zhí)行的數(shù)據(jù)結(jié)構(gòu)。棧幀存儲(chǔ)了方法的局部變量表、操作數(shù) 棧、動(dòng)態(tài)連接和方法返回地址等信息。每一個(gè)方法從調(diào)用至執(zhí)行完成的過(guò)程,都對(duì)應(yīng)著一個(gè)棧幀在虛擬機(jī)棧里從入 棧到出棧的過(guò)程。

三、設(shè)置虛擬機(jī)棧的大小

Xss 為jvm啟動(dòng)的每個(gè)線程分配的內(nèi)存大小,默認(rèn)JDK1.4中是256K,JDK1.5+中是1M

  • Linux/x64 (64-bit): 1024 KB
  • macOS (64-bit): 1024 KB
  • Oracle Solaris/x64 (64-bit): 1024 KB
  • Windows: The default value depends on virtual memory

-Xss1m

-Xss1024k

-Xss1048576

四、局部變量表

局部變量表(Local Variable Table)是一組變量值存儲(chǔ)空間,用于存放方法參數(shù)和方法內(nèi)定義的局部變量。包括8種基 本數(shù)據(jù)類型、對(duì)象引用(reference類型)和returnAddress類型(指向一條字節(jié)碼指令的地址)。 其中64位長(zhǎng)度的long和double類型的數(shù)據(jù)會(huì)占用2個(gè)局部變量空間(Slot),其余的數(shù)據(jù)類型只占用1個(gè)。

五、操作數(shù)棧

操作數(shù)棧(Operand Stack)也稱作操作棧,是一個(gè)后入先出棧(LIFO)。隨著方法執(zhí)行和字節(jié)碼指令的執(zhí)行,會(huì)從局部 變量表或?qū)ο髮?shí)例的字段中復(fù)制常量或變量寫入到操作數(shù)棧,再隨著計(jì)算的進(jìn)行將棧中元素出棧到局部變量表或者 返回給方法調(diào)用者,也就是出棧/入棧操作。

六、動(dòng)態(tài)鏈接

Java虛擬機(jī)棧中,每個(gè)棧幀都包含一個(gè)指向運(yùn)行時(shí)常量池中該棧所屬方法的符號(hào)引用,持有這個(gè)引用的目的是為了 支持方法調(diào)用過(guò)程中的動(dòng)態(tài)鏈接(Dynamic Linking)。

動(dòng)態(tài)鏈接的作用:將符號(hào)引用轉(zhuǎn)換成直接引用。

七、方法返回地址

方法返回地址存放調(diào)用該方法的PC寄存器的值。一個(gè)方法的結(jié)束,有兩種方式:正常地執(zhí)行完成,出現(xiàn)未處理的異 常非正常的退出。無(wú)論通過(guò)哪種方式退出,在方法退出后都返回到該方法被調(diào)用的位置。方法正常退出時(shí),調(diào)用者 的PC計(jì)數(shù)器的值作為返回地址,即調(diào)用該方法的指令的下一條指令的地址。而通過(guò)異常退出的,返回地址是要通過(guò) 異常表來(lái)確定,棧幀中一般不會(huì)保存這部分信息。 無(wú)論方法是否正常完成,都需要返回到方法被調(diào)用的位置,程序才能繼續(xù)進(jìn)行。

八、本地方法棧

本地方法棧(Native Method Stacks) 與虛擬機(jī)棧所發(fā)揮的作用是非常相似的, 其區(qū)別只是虛擬機(jī)棧為虛擬機(jī)執(zhí)行 Java方法(也就是字節(jié)碼) 服務(wù), 而本地方法棧則是為虛擬機(jī)使用到的本地(Native) 方法服務(wù)。

特點(diǎn)

(1)本地方法棧加載native的但是方法, native類方法存在的意義當(dāng)然是填補(bǔ)java代碼不方便實(shí)現(xiàn)的缺陷而提出的。

(2)虛擬機(jī)棧為虛擬機(jī)執(zhí)行Java方法服務(wù),而本地方法棧則是為虛擬機(jī)使用到的Native方法服務(wù)。

(3)是線程私有的,它的生命周期與線程相同,每個(gè)線程都有一個(gè)。

在Java虛擬機(jī)規(guī)范中,對(duì)本地方法棧這塊區(qū)域,與Java虛擬機(jī)棧一樣,規(guī)定了兩種類型的異常:

(1)StackOverFlowError :線程請(qǐng)求的棧深度>所允許的深度。

(2)OutOfMemoryError:本地方法棧擴(kuò)展時(shí)無(wú)法申請(qǐng)到足夠的內(nèi)存


新聞標(biāo)題:JVM優(yōu)化:虛擬機(jī)棧&本地方法棧
網(wǎng)站鏈接:http://m.5511xx.com/article/djijdhg.html