



下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、工作以來(lái),代碼越寫越多,程序也越來(lái)越臃腫,效率越來(lái)越低,對(duì)于我這樣一個(gè)追求完美的程序員來(lái)說(shuō),這是絕對(duì)不被允許的,于是除了不斷優(yōu)化程序結(jié)構(gòu)外,內(nèi)存優(yōu)化和性能調(diào)優(yōu)就成了我慣用的“伎倆”。要對(duì)Java程序進(jìn)行內(nèi)存優(yōu)化和性能調(diào)優(yōu),不了解虛擬機(jī)的內(nèi)部原理(或者叫規(guī)范更嚴(yán)謹(jǐn)一點(diǎn))是肯定不行的,這里推薦一本好書深入Java虛擬機(jī) (第二版)(Bill Venners著,曹曉剛 蔣靖 譯,實(shí)際上本文正是作者閱讀本書之后,對(duì)Java虛擬機(jī)的個(gè)人理解闡述)。當(dāng)然了,了解Java虛擬機(jī)的好處并不僅限于上述兩點(diǎn)好處。從更深一點(diǎn)的技術(shù)層 面上看,了解Java虛擬機(jī)的規(guī)范和實(shí)現(xiàn),將更加有助于我們編寫高效、穩(wěn)定的Java代
2、碼。比如,假如了解Java虛擬機(jī)的內(nèi)存模型,了解虛擬機(jī)的內(nèi)存回 收機(jī)制,那么我們就不會(huì)過(guò)分依賴它,而會(huì)在需要的時(shí)候顯式的”釋放內(nèi)存”(Java代碼不能顯式釋放內(nèi)存,但是可以通過(guò)釋放對(duì)象引用告知垃圾回收器回收該 對(duì)象需要被回收),以降低不必要的內(nèi)存消耗;假如我們了解Java棧的工作原理,那么我們就可以通過(guò)減少遞歸層數(shù),減少循環(huán)次數(shù)來(lái)降低堆棧溢出的風(fēng)險(xiǎn)???能對(duì)于應(yīng)用開發(fā)人員來(lái)說(shuō),可能不會(huì)直接去涉及這些Java虛擬機(jī)底層實(shí)現(xiàn)的工作,但是了解這些背景知識(shí),或多或少,都會(huì)對(duì)我們寫的程序產(chǎn)生潛移默化的好的 影響。本篇文章,將簡(jiǎn)明扼要的說(shuō)明Java虛擬機(jī)的體系結(jié)構(gòu)和內(nèi)存模型,如有用詞不妥或解釋不準(zhǔn)確之處,
3、請(qǐng)不吝指正,深感榮幸!Java 虛擬機(jī)體系結(jié)構(gòu)類裝載子系統(tǒng)Java虛擬機(jī)有兩種類裝載器,分別是啟動(dòng)類裝載器和用戶自定義裝載器。通類裝載子系統(tǒng)通過(guò)類的全限定名(包名和類名,網(wǎng)絡(luò)裝載還包括 URL)將 Class 裝載進(jìn)運(yùn)行時(shí)數(shù)據(jù)區(qū)。對(duì)于每一個(gè)被裝載的類型,Java虛擬機(jī)都會(huì)創(chuàng)建一個(gè)java.lang.Class類的實(shí)例來(lái)代表該類型,該實(shí)例被放在內(nèi)存中的堆 區(qū),而裝載的類型信息則位于方法區(qū),這一點(diǎn)和所有其他對(duì)象都是一樣的。類裝載子系統(tǒng)在裝載一個(gè)類型前,除了要定位和導(dǎo)入對(duì)應(yīng)的二進(jìn)制class文件外,還要驗(yàn)證導(dǎo)入類的正確性,為類變量分配并初始化內(nèi)存,以及解析符號(hào)引用為直接引用,這些動(dòng)作嚴(yán)格按照以下順序
4、進(jìn)行:1)裝載查找并裝載類型的二進(jìn)制數(shù)據(jù);2)連接執(zhí)行驗(yàn)證,準(zhǔn)備以及解析(可選)3)驗(yàn)證 確保被導(dǎo)入類型的正確性4)準(zhǔn)備 為類變量分配內(nèi)存,并將其初始化為默認(rèn)值5)解析 把類型中的符號(hào)引用轉(zhuǎn)換為直接應(yīng)用方法區(qū)對(duì)于每一個(gè)被類裝載子系統(tǒng)裝載的類型,虛擬機(jī)都會(huì)保存下列數(shù)據(jù)到方法區(qū):· 類型的全限定名· 類型超類的全限定名(java.lang.Object沒有超類)· 類型是類類型還是接口類型· 類型的訪問(wèn)修飾符· 任何直接超接口的全限定名有序列表除了上述基本類型信息,還將保存如下信息:· 類型的常量池· 字段信息(包括字段名、字段
5、類型、字段修飾符)· 方法信息(包括方法名、返回類型、參數(shù)的數(shù)量和類型、方法修飾符,如果方法不是抽象和本地的,還將保存方法的字節(jié)碼、操作數(shù)棧和該方法棧幀中的局部變量區(qū)的大小和異常表)· 常量以外的所有類變量(其實(shí)就是類的靜態(tài)變量,因?yàn)殪o態(tài)變量是所有實(shí)例共享的,且與類型直接相關(guān),所以他們是類一級(jí)的變量,作為類的成員被保存在方法區(qū))一個(gè)到類ClassLoader的引用/返回的就是剛才保存的ClassLoader引用 String.class.getClassLoader();一個(gè)到Class類的引用/將返回剛才保存的Class類的引用
6、; String.class;注意,方法區(qū)也是可以被垃圾回收器回收的。堆Java程序在運(yùn)行時(shí)創(chuàng)建的所有類實(shí)例或數(shù)組都放在同一個(gè)堆中,而每一個(gè)Java虛擬機(jī)也是有一個(gè)對(duì)空間,所有線程共享一個(gè)堆(這就是一個(gè)多線程的Java程序會(huì)產(chǎn)生對(duì)象訪問(wèn)的同步問(wèn)題的原因了)。由于每一種Java虛擬機(jī)都有對(duì)虛擬機(jī)規(guī)范的不同實(shí)現(xiàn),所以我們可能不知道每一種Java虛擬機(jī)在堆中是以何種形式表示對(duì)象實(shí)例的,不過(guò)我們可以通過(guò)下面這可能的實(shí)現(xiàn)來(lái)一窺端倪:程序計(jì)數(shù)器對(duì)于運(yùn)行中的Java程序而言,每一個(gè)線程都有自己的PC(程序計(jì)數(shù)器)寄存器,它是在該線程啟動(dòng)時(shí)創(chuàng)建的,大小為一個(gè)字長(zhǎng),用來(lái)保存需要被執(zhí)行的下一行代碼的位置。Java棧每一個(gè)線程都有一個(gè)Java棧,以棧幀為單位保存線程的運(yùn)行狀態(tài)。虛擬機(jī)對(duì)Java棧的操作有兩種:壓棧和出棧,二者都已幀為單位。棧幀保存了傳入?yún)?shù)、局部變量、中間運(yùn)算結(jié)果等數(shù)據(jù),在方法完成時(shí)被彈出,然后釋放??匆幌聝蓚€(gè)局部變量相加時(shí)棧幀的內(nèi)存快照本地方法棧這是 Java 調(diào)用操作系統(tǒng)本地庫(kù)的地方,用來(lái)實(shí)現(xiàn) JNI(Java Native Interface,Java 本地接口)執(zhí)行引擎Java虛擬機(jī)的核心,控制裝入 Java 字節(jié)碼并解析;對(duì)于運(yùn)行中的Java程序而言,每一個(gè)線程都是一個(gè)獨(dú)立的虛擬機(jī)執(zhí)行引擎的實(shí)例,從線程生命周期的開
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 橡膠板在防塵口罩密封材料中的應(yīng)用考核試卷
- 耳部微波治療技術(shù)解析
- 醫(yī)學(xué)檢驗(yàn)畢業(yè)就業(yè)去向分析
- 影視作品音樂版權(quán)授權(quán)與版權(quán)保護(hù)及合作開發(fā)及廣告合作合同
- 影視動(dòng)畫渲染節(jié)點(diǎn)租賃與智能存儲(chǔ)系統(tǒng)管理協(xié)議
- 電子商務(wù)法律審查補(bǔ)充協(xié)議
- 高效生態(tài)有機(jī)農(nóng)場(chǎng)大棚租賃及生態(tài)旅游開發(fā)合同
- 拼多多農(nóng)產(chǎn)品店鋪直播代運(yùn)營(yíng)服務(wù)協(xié)議
- 環(huán)保產(chǎn)業(yè)投資收益分配有限合伙投資合同
- 美團(tuán)外賣配送員培訓(xùn)及服務(wù)協(xié)議
- 2025江蘇中考:物理高頻考點(diǎn)
- 日料店空間設(shè)計(jì)
- 2024年高級(jí)審計(jì)師試題及答案解析
- 2025-2030年中國(guó)醫(yī)用熱敏紙行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 2025年江西省安??h事業(yè)單位公開招聘輔警36名筆試題帶答案
- 2025年全國(guó)國(guó)家版圖知識(shí)競(jìng)賽題庫(kù)及答案
- 河南省豫西北教研聯(lián)盟(許平洛濟(jì))2025屆高三下學(xué)期第三次質(zhì)量檢測(cè)生物試卷+答案
- 2025初級(jí)《銀行業(yè)法律法規(guī)與綜合能力》高分必會(huì)試題庫(kù)1000題-單選500題
- 低值易耗品試題及答案
- 10.1 認(rèn)識(shí)民法典 課件-2024-2025學(xué)年統(tǒng)編版道德與法治七年級(jí)下冊(cè)
- 2025年新高考地區(qū)數(shù)學(xué)名校地市選填壓軸題好題匯編(八)(解析版)
評(píng)論
0/150
提交評(píng)論