Python知識(shí)分享網(wǎng) - 專(zhuān)業(yè)的Python學(xué)習(xí)網(wǎng)站 學(xué)Python,上Python222
JVM手冊(cè) PDF 下載
匿名網(wǎng)友發(fā)布于:2023-10-28 10:14:18
(侵權(quán)舉報(bào))
(假如點(diǎn)擊沒(méi)反應(yīng),多刷新兩次就OK!)

JVM手冊(cè) PDF 下載  圖1

 

 

 

資料內(nèi)容:

 

 

本地方法棧(Native Method Stacks
本地方法棧與虛擬機(jī)棧所發(fā)揮的作用是非常相似的,其區(qū)別過(guò)是虛擬機(jī)棧為虛擬機(jī)執(zhí)
Java方法(也就是字節(jié)碼)
服務(wù),而本地方法棧則是為虛擬機(jī)使用到的Native方法服務(wù)。
虛擬機(jī)規(guī)范中對(duì)本地方法棧中的方法使用的語(yǔ)言、使用方式與數(shù)據(jù)結(jié)構(gòu)并沒(méi)有強(qiáng)制規(guī)定,因此具體的虛擬機(jī)可以自
由實(shí)現(xiàn)它。甚至有的虛擬機(jī)(譬如Sun HotSpot虛擬機(jī))直接就把本地方法棧和虛擬機(jī)棧合二為一。與虛擬機(jī)棧一樣,
本地方法棧區(qū)域也會(huì)拋出StackOverflowErrorOutOfMemoryError異常。
么是Native Method?簡(jiǎn)單地講,一個(gè)Native Method就是一個(gè)java調(diào)用非java代碼的接口。一個(gè)Native Method
是這樣一個(gè)java的方法:該方法的實(shí)現(xiàn)由非java語(yǔ)言實(shí)現(xiàn),比如C。這個(gè)特征并非java所特有,很多其它的編程
語(yǔ)言都有這一機(jī)制,比如在C++中,你可以用extern "C"告知C++編譯?去調(diào)用一個(gè)C的函數(shù)。
方法區(qū)(MethodArea
方法區(qū)也是一塊被重點(diǎn)關(guān)注的區(qū)域,主要特點(diǎn)如下:
線程共享區(qū)域,因此這是線程安全的區(qū)域。
它用于存儲(chǔ)已被虛擬機(jī)加載的類(lèi)信息、常、靜態(tài)變、即時(shí)編譯?編譯后的代碼等數(shù)據(jù)。當(dāng)
方法區(qū)無(wú)法滿(mǎn)足內(nèi)存分配需求時(shí),將拋出OutOfMemoryError異常。
雖然Java虛擬機(jī)規(guī)范把方法區(qū)描述為堆的一個(gè)邏輯部分,但是它卻有一個(gè)別名叫做Non-Heap(非堆),目的應(yīng)該是
Java堆區(qū)分開(kāi)來(lái)。對(duì)于習(xí)慣在HotSpot虛擬機(jī)上開(kāi)發(fā)和部署程序的開(kāi)發(fā)者來(lái)說(shuō),很多人愿意把方法區(qū)稱(chēng)為永久代
Permanent Generation),本質(zhì)上兩者并等價(jià),那么他們之間的區(qū)別到底是么?方法區(qū)是Java虛擬機(jī)規(guī)范中的定
義,是一種規(guī)范,而永久代是一種實(shí)現(xiàn),一個(gè)是標(biāo)準(zhǔn)一個(gè)是實(shí)現(xiàn)。過(guò)Java 8以后就沒(méi)有永久代這個(gè)說(shuō)法,元空間
取代永久代。
Java虛擬機(jī)規(guī)范對(duì)這個(gè)區(qū)域的限制非常寬松,除Java堆一樣需要連續(xù)的內(nèi)存和可以選擇固定大小或者可擴(kuò)展外,
還可以選擇實(shí)現(xiàn)垃圾收集。相對(duì)而言,垃圾收集為在這個(gè)區(qū)域是比較少出現(xiàn)的,但并非數(shù)據(jù)進(jìn)入方法區(qū)就如永
久代的名字一樣永久存在。這個(gè)區(qū)域的內(nèi)存回收目標(biāo)主要是針對(duì)常池的回收和對(duì)類(lèi)型的卸載,一般來(lái)說(shuō)這
個(gè)區(qū)域的回收成績(jī)比較難以令人滿(mǎn)意,尤其是類(lèi)型的卸載,條件相當(dāng)苛刻,但是這部分區(qū)域的回收確實(shí)是有必
要的。