今天就跟大家聊聊有關(guān)Java中怎么利用Jvm加載類,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
創(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ù),十載柳城做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
1、棧:
每一個(gè)線程運(yùn)行起來(lái)的時(shí)候就會(huì)對(duì)應(yīng)一個(gè)棧(線程棧),棧中存放的數(shù)據(jù)被當(dāng)前線程所獨(dú)享不會(huì)產(chǎn)生資源共享情況,所以線程是安全的。
而棧當(dāng)中存放的是棧幀,當(dāng)線程調(diào)用方法時(shí),就是形成一個(gè)棧幀,并將這個(gè)棧幀進(jìn)行壓棧操作。方法執(zhí)行完后,進(jìn)行出棧操作。這個(gè)棧幀里面包括局部變量,操作數(shù)棧,指向當(dāng)前方法對(duì)應(yīng)類的常量池引用,方法返回地址等信息。
2、本地方法棧:
本地方法棧的機(jī)制和棧的相似,區(qū)別在于,棧運(yùn)行的是Java 實(shí)現(xiàn)的方法,而本地方法棧運(yùn)行的是本地方法。本地方法指的是 JVM 需要調(diào)用非Java 語(yǔ)言所實(shí)現(xiàn)的方法,例如 C 語(yǔ)言。在 JVM 規(guī)范中,沒(méi)有強(qiáng)化性要求實(shí)現(xiàn)方一定要?jiǎng)澐殖霰镜胤椒#ɡ纾篐otSpot 虛擬機(jī)將本地方法棧和棧合二為一)和具體實(shí)現(xiàn)(不同的操作系統(tǒng),對(duì) JVM規(guī)范的具體實(shí)現(xiàn)都不一樣)。
3、程序計(jì)數(shù)器:
程序計(jì)數(shù)器也可以稱為 PC 寄存器(通俗講就是 指令緩存)。它主要用于緩存當(dāng)前程序下一條指令的指令地址,CPU 根據(jù)這個(gè)地址找到將要執(zhí)行的指令。這個(gè)寄存器是 JVM內(nèi)部實(shí)現(xiàn)的,不是物理概念上的計(jì)數(shù)器,不過(guò)和 JVM 的實(shí)現(xiàn)邏輯一樣。
4、堆:
堆內(nèi)存主要存放創(chuàng)建的對(duì)象和數(shù)組。堆內(nèi)存在 JVM 中是唯一的,能被多個(gè)線程所共享。堆里面的每一個(gè)對(duì)象都存放著實(shí)例的實(shí)例變量。堆內(nèi)存的對(duì)象沒(méi)有被引用,會(huì)自動(dòng)被 Java垃圾回收機(jī)制回收。
當(dāng)在方法中定義了局部變量,如果這個(gè)變量是基本數(shù)據(jù)類型,那么這個(gè)變量的值就直接存放在棧中;如果這個(gè)變量是引用數(shù)據(jù)類型,那么變量值就存放在堆內(nèi)存中,而棧中存放的是指向堆中的引用地址。
5、方法區(qū):
方法區(qū)在 JVM 也是一個(gè)非常重要的一塊內(nèi)存區(qū)域,和堆一樣,可以被多個(gè)線程多共享。
主要存放每一個(gè)加載 class 的信息。class 信息主要包含魔數(shù)(確定是否是一個(gè) class 文件),常量池,訪問(wèn)標(biāo)志(當(dāng)前的類是普通類還是接口,是否是抽象類,是否被 public 修飾,是否使用了 final修飾等描述信息......),字段表集合信息(使用什么訪問(wèn)修飾符,是實(shí)例變量還是靜態(tài)變量,是否使用了 final 修飾等描述信息.....),方法表集合信息(使用什么訪問(wèn)修飾符,是否靜態(tài)方法,是否使用了 final 修飾,是否使用了 synchronized 修飾,是否是native 方法......)等內(nèi)容。當(dāng)一個(gè)類加載器加載了一個(gè)類的時(shí)候,會(huì)根據(jù)這個(gè) class 文件創(chuàng)建一個(gè)class 對(duì)象,class 對(duì)象就包含了上述的信息。
后續(xù)要?jiǎng)?chuàng)建這個(gè)類的實(shí)例,都根據(jù)這個(gè) class 對(duì)象創(chuàng)建出來(lái)的。
6、常量池:
常量池是方法區(qū)中的一部分,存放 class 對(duì)象中最重要的資源。JVM 為每一個(gè) class 對(duì)象都維護(hù)一個(gè)常量池。
看完上述內(nèi)容,你們對(duì)Java中怎么利用Jvm加載類有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。