成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深入Java虛擬機(jī)之虛擬機(jī)體系結(jié)構(gòu)

開發(fā) 后端
在日常工作中,程序員在維護(hù)和增加功能時程序的代碼越來越多,越來越臃腫了。于是,優(yōu)化是必然的。作為一個完美的程序員,內(nèi)存優(yōu)化和性能調(diào)優(yōu)已經(jīng)是家常便飯了。

工作以來,代碼越寫越多,程序也越來越臃腫,效率越來越低,對于我這樣一個追求***的程序員來說,這是絕對不被允許的,于是除了不斷優(yōu)化程序結(jié)構(gòu)外,內(nèi)存優(yōu)化和性能調(diào)優(yōu)就成了我慣用的“伎倆”。

要對Java程序進(jìn)行內(nèi)存優(yōu)化和性能調(diào)優(yōu),不了解虛擬機(jī)的內(nèi)部原理(或者叫規(guī)范更嚴(yán)謹(jǐn)一點)是肯定不行的,這里推薦一本好書《深入Java虛擬機(jī)(第二版)》(Bill Venners著,曹曉剛 蔣靖 譯,實際上本文正是作者閱讀本書之后,對Java虛擬機(jī)的個人理解闡述)。當(dāng)然了,了解Java虛擬機(jī)的好處并不僅限于上述兩點好處。從更深一點的技術(shù)層面上看,了解Java虛擬機(jī)的規(guī)范和實現(xiàn),將更加有助于我們編寫高效、穩(wěn)定的Java代碼。比如,假如了解Java虛擬機(jī)的內(nèi)存模型,了解虛擬機(jī)的內(nèi)存回收機(jī)制,那么我們就不會過分依賴它,而會在需要的時候顯式的"釋放內(nèi)存"(Java代碼不能顯式釋放內(nèi)存,但是可以通過釋放對象引用告知垃圾回收器回收該對象需要被回收),以降低不必要的內(nèi)存消耗;假如我們了解Java棧的工作原理,那么我們就可以通過減少遞歸層數(shù),減少循環(huán)次數(shù)來降低堆棧溢出的風(fēng)險。可能對于應(yīng)用開發(fā)人員來說,可能不會直接去涉及這些Java虛擬機(jī)底層實現(xiàn)的工作,但是了解這些背景知識,或多或少,都會對我們寫的程序產(chǎn)生潛移默化的好的影響。

本篇文章,將簡明扼要的說明Java虛擬機(jī)的體系結(jié)構(gòu)和內(nèi)存模型,如有用詞不妥或解釋不準(zhǔn)確之處,請不吝指正,深感榮幸!

Java 虛擬機(jī)體系結(jié)構(gòu)

類裝載子系統(tǒng)

Java虛擬機(jī)有兩種類裝載器,分別是啟動類裝載器和用戶自定義裝載器。

通類裝載子系統(tǒng)通過類的全限定名(包名和類名,網(wǎng)絡(luò)裝載還包括 URL)將 Class 裝載進(jìn)運行時數(shù)據(jù)區(qū)。對于每一個被裝載的類型,Java虛擬機(jī)都會創(chuàng)建一個java.lang.Class類的實例來代表該類型,該實例被放在內(nèi)存中的堆區(qū),而裝載的類型信息則位于方法區(qū),這一點和所有其他對象都是一樣的。

類裝載子系統(tǒng)在裝載一個類型前,除了要定位和導(dǎo)入對應(yīng)的二進(jìn)制class文件外,還要驗證導(dǎo)入類的正確性,為類變量分配并初始化內(nèi)存,以及解析符號引用為直接引用,這些動作嚴(yán)格按照以下順序進(jìn)行:

1)裝載——查找并裝載類型的二進(jìn)制數(shù)據(jù);

2)連接——執(zhí)行驗證,準(zhǔn)備以及解析(可選)

3)驗證 確保被導(dǎo)入類型的正確性

4)準(zhǔn)備 為類變量分配內(nèi)存,并將其初始化為默認(rèn)值

5)解析 把類型中的符號引用轉(zhuǎn)換為直接應(yīng)用

方法區(qū)

對于每一個被類裝載子系統(tǒng)裝載的類型,虛擬機(jī)都會保存下列數(shù)據(jù)到方法區(qū):

◆  類型的全限定名

◆ 類型超類的全限定名(java.lang.Object沒有超類)

◆ 類型是類類型還是接口類型

◆ 類型的訪問修飾符

◆ 任何直接超接口的全限定名有序列表

除了上述基本類型信息,還將保存如下信息:

◆ 類型的常量池

◆ 字段信息(包括字段名、字段類型、字段修飾符)

◆ 方法信息(包括方法名、返回類型、參數(shù)的數(shù)量和類型、方法修飾符,如果方法不是抽象和本地的,還將保存方法的字節(jié)碼、操作數(shù)棧和該方法棧幀中的局部變量區(qū)的大小和異常表)

◆ 常量以外的所有類變量(其實就是類的靜態(tài)變量,因為靜態(tài)變量是所有實例共享的,且與類型直接相關(guān),所以他們是類一級的變量,作為類的成員被保存在方法區(qū))

一個到類ClassLoader的引用

  1. //返回的就是剛才保存的ClassLoader引用   
  2. String.class.getClassLoader();  

一個到Class類的引用

  1. //將返回剛才保存的Class類的引用   
  2. String.class

注意,方法區(qū)也是可以被垃圾回收器回收的。

Java程序在運行時創(chuàng)建的所有類實例或數(shù)組都放在同一個堆中,而每一個Java虛擬機(jī)也是有一個對空間,所有線程共享一個堆(這就是一個多線程的Java程序會產(chǎn)生對象訪問的同步問題的原因了)。

由于每一種Java虛擬機(jī)都有對虛擬機(jī)規(guī)范的不同實現(xiàn),所以我們可能不知道每一種Java虛擬機(jī)在堆中是以何種形式表示對象實例的,不過我們可以通過下面這可能的實現(xiàn)來一窺端倪:

 

程序計數(shù)器

對于運行中的Java程序而言,每一個線程都有自己的PC(程序計數(shù)器)寄存器,它是在該線程啟動時創(chuàng)建的,大小為一個字長,用來保存需要被執(zhí)行的下一行代碼的位置。

Java棧

每一個線程都有一個Java棧,以棧幀為單位保存線程的運行狀態(tài)。虛擬機(jī)對Java棧的操作有兩種:壓棧和出棧,二者都已幀為單位。棧幀保存了傳入?yún)?shù)、局部變量、中間運算結(jié)果等數(shù)據(jù),在方法完成時被彈出,然后釋放。

看一下兩個局部變量相加時棧幀的內(nèi)存快照

 

本地方法棧

這是 Java 調(diào)用操作系統(tǒng)本地庫的地方,用來實現(xiàn) JNI(Java Native Interface,Java 本地接口)

執(zhí)行引擎

Java虛擬機(jī)的核心,控制裝入 Java 字節(jié)碼并解析;對于運行中的Java程序而言,每一個線程都是一個獨立的虛擬機(jī)執(zhí)行引擎的實例,從線程生命周期的開始到結(jié)束,他要么在執(zhí)行字節(jié)碼,要么在執(zhí)行本地方法。

本地接口

連接了本地方法棧和操作系統(tǒng)庫。

注:文中所有提到"Java虛擬機(jī)"的地方都是指"JavaEE和JavaSE平臺的Java虛擬機(jī)規(guī)范"。

原文鏈接:http://yshjava.iteye.com/blog/1327778

【編輯推薦】

  1. Java與XML:采用DOM操作XML文件
  2. 從Java的角度理解Ext的extend
  3. Windows 64位環(huán)境的Java服務(wù)配置
  4. 利用JavaMail API 解析MIME
  5. 詳細(xì)解析Java中抽象類和接口的區(qū)別
責(zé)任編輯:林師授 來源: 楊勝寒的博客
相關(guān)推薦

2010-09-16 14:36:43

Java虛擬機(jī)

2017-02-06 21:08:34

Android虛擬機(jī)體系結(jié)構(gòu)

2016-03-02 15:09:57

Java虛擬機(jī)體系結(jié)構(gòu)

2011-11-30 14:12:05

JavaJVM虛擬機(jī)

2009-06-12 21:39:48

Java虛擬機(jī)體系結(jié)構(gòu)Java虛擬機(jī)

2016-09-01 12:37:13

OpenStack虛擬機(jī)Metadata

2012-11-14 09:57:46

JavaJava虛擬機(jī)JVM

2010-09-25 15:59:54

JVM虛擬機(jī)

2012-05-18 10:22:23

2011-12-28 13:38:00

JavaJVM

2010-07-26 09:02:38

2012-03-05 11:09:01

JavaClass

2013-07-17 09:32:58

2024-03-26 07:30:07

Java虛擬機(jī)源文件

2024-03-29 11:42:21

Java虛擬機(jī)

2019-07-24 16:04:47

Java虛擬機(jī)并發(fā)

2020-06-18 16:39:10

KVM虛擬化虛擬機(jī)

2010-09-17 15:12:57

JVMJava虛擬機(jī)

2011-12-25 15:33:13

ibmdwKVM

2024-04-03 13:49:00

Java虛擬機(jī)方法區(qū)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩欧美专区 | 古装三级在线播放 | 九九热在线观看视频 | 麻豆视频在线免费看 | 青青草免费在线视频 | 久久精品亚洲精品国产欧美 | 国产在线一区二区 | 亚洲一区二区在线电影 | 亚洲一区二区三区视频免费观看 | 天天综合网91 | 一区二区三区精品在线视频 | 亚洲三区在线 | 天天碰夜夜操 | 国产欧美精品区一区二区三区 | 久久久成人免费视频 | 日韩在线一区二区三区 | 天天干天天色 | 日本一区二区三区四区 | 亚洲精品成人 | 美女国产精品 | 久久免费视频在线 | 亚欧午夜| 久久精品亚洲精品国产欧美 | 国产情侣在线看 | 国产成人一区二 | 日韩在线不卡 | 国产精品久久 | 免费的一级视频 | 欧美综合国产精品久久丁香 | 国产成人精品一区二区三区在线 | 亚洲视频网| 日韩一二三区视频 | 久久久久亚洲精品中文字幕 | 精品亚洲一区二区三区 | 国产一区二区三区免费观看在线 | www.99re| 婷婷久久精品一区二区 | 三级特黄特色视频 | 一区亚洲 | 亚洲欧美国产精品久久 | 欧美1区2区 |