Python知識分享網(wǎng) - 專業(yè)的Python學(xué)習(xí)網(wǎng)站 學(xué)Python,上Python222
JVM手冊 PDF 下載
發(fā)布于:2023-10-28 10:14:18
(假如點擊沒反應(yīng),多刷新兩次就OK!)

JVM手冊 PDF 下載  圖1

 

 

 

資料內(nèi)容:

 

 

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