国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

《深入理解Java虛擬機》讀書筆記:Class類文件的結構

這篇具有很好參考價值的文章主要介紹了《深入理解Java虛擬機》讀書筆記:Class類文件的結構。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

《深入理解Java虛擬機》讀書筆記:Class類文件的結構

                                    Class類文件的結構

?

  Sun公司以及其他虛擬機提供商發(fā)布了許多可以運行在各種不同平臺上的虛擬機,這些虛擬機都可以載入和執(zhí)行同一種平臺無關的的程序存儲格式——字節(jié)碼(ByteCode),從而實現(xiàn)了程序的“一次編寫,到處運行”。

?

《深入理解Java虛擬機》讀書筆記:Class類文件的結構

                Java虛擬機提供的語言無關性

?

  “Class文件”這種特定的二進制文件格式所關聯(lián),Class文件中包含了Java虛擬機指令集和符號表以及若干其他輔助信息。使用Java編譯器可以把Java代碼編譯為存儲字節(jié)碼的Class文件。

Class類文件的結構:

  根據(jù)Java虛擬機規(guī)范的規(guī)定,Class文件格式采用一種類似于C語言結構體的偽結構來存儲數(shù)據(jù),這種偽結構中只有兩種數(shù)據(jù)類型:無符號數(shù)和表,后面的解析都要以這兩種數(shù)據(jù)類型為基礎,所以這里要先介紹這兩個概念。無符號數(shù)屬于基本的數(shù)據(jù)類型,以u1、u2、u4、u8來分別代表1個字節(jié)、2個字節(jié)、4個字節(jié)和8個字節(jié)的無符號數(shù),無符號數(shù)可以用來描述數(shù)字、索引引用、數(shù)量值或者按照UTF-8編碼構成字符串值。表是由多個無符號數(shù)或者其他表作為數(shù)據(jù)項構成的復合數(shù)據(jù)類型,所有表都習慣性地以“_info”結尾。表用于描述有層次關系的復合結構的數(shù)據(jù),整個Class文件本質上就是一張表,它由表6-1所示的數(shù)據(jù)項構成。

?

《深入理解Java虛擬機》讀書筆記:Class類文件的結構

                               Class文件格式

1、 魔數(shù)

  每個Class文件的頭4個字節(jié)稱為魔數(shù)(Magic Number),它的唯一作用是確定這個文件是否為一個能被虛擬機接受的Class文件。Class文件的魔數(shù)的獲得很有“浪漫氣息”,值為:0xCAFEBABE(咖啡寶貝?)。

?

2、Class文件的版本

  緊接著魔數(shù)的4個字節(jié)存儲的是Class文件的版本號:第5和第6個字節(jié)是次版本號(Minor Version),第7和第8個字節(jié)是主版本號(Major Version)。Java的版本號是從45開始的,JDK 1.1之后的每個JDK大版本發(fā)布主版本號向上加1(JDK 1.0~1.1使用了45.0~45.3的版本號),高版本的JDK能向下兼容以前版本的Class文件,但不能運行以后版本的Class文件,即使文件格式并未發(fā)生任何變化,虛擬機也必須拒絕執(zhí)行超過其版本號的Class文件。

?

《深入理解Java虛擬機》讀書筆記:Class類文件的結構

Class文件版本號

3、常量池

  緊接著主次版本號之后的是常量池入口,常量池可以理解為Class文件之中的資源倉庫,它是Class文件結構中與其他項目關聯(lián)最多的數(shù)據(jù)類型,也是占用Class文件空間最大的數(shù)據(jù)項目之一,同時它還是在Class文件中第一個出現(xiàn)的表類型數(shù)據(jù)項目。

常量池中主要存放兩大類常量:字面量(Literal)和符號引用(Symbolic References)。

  字面量比較接近于Java語言層面的常量概念,如文本字符串、聲明為final的常量值等。

  而符號引用則屬于編譯原理方面的概念,包括了下面三類常量:

(1) 類和接口的全限定名(Fully Qualified Name)

(2) 字段的名稱和描述符(Descriptor)

(3) 方法的名稱和描述符

?

  常量池中每一項常量都是一個表,在JDK 1.7之前共有11種結構各不相同的表結構數(shù)據(jù),在JDK 1.7中為了更好地支持動態(tài)語言調(diào)用,又額外增加了3種(
CONSTANT_MethodHandle_info、CONSTANT_MethodType_info和CONSTANT_InvokeDynamic_info,本章不會涉及這3種新增的類型,在第8章介紹字節(jié)碼執(zhí)行和方法調(diào)用時,將會詳細講解)。這14種表都有一個共同的特點,就是表開始的第一位是一個u1類型的標志位(tag,取值見表6-3中標志列),代表當前這個常量屬于哪種常量類型。這14種常量類型所代表的具體含義見下表。

?

《深入理解Java虛擬機》讀書筆記:Class類文件的結構

                                   常量池的項目類型

4 、訪問標志

  在常量池結束之后,緊接著的兩個字節(jié)代表訪問標志(access_flags),這個標志用于識別一些類或者接口層次的訪問信息,包括:這個Class是類還是接口;是否定義為public類型;是否定義為abstract類型;如果是類的話,是否被聲明為final等。具體的標志位以及標志的含義見下表。

《深入理解Java虛擬機》讀書筆記:Class類文件的結構

訪問標志

5 、類索引、父類索引與接口索引集合

  類索引(this_class)和父類索引(super_class)都是一個u2類型的數(shù)據(jù),而接口索引集合(interfaces)是一組u2類型的數(shù)據(jù)的集合,Class文件中由這三項數(shù)據(jù)來確定這個類的繼承關系。類索引用于確定這個類的全限定名,父類索引用于確定這個類的父類的全限定名。由于Java語言不允許多重繼承,所以父類索引只有一個,除了java.lang.Object之外,所有的Java類都有父類,因此除了java.lang.Object外,所有Java類的父類索引都不為0。接口索引集合就用來描述這個類實現(xiàn)了哪些接口,這些被實現(xiàn)的接口將按implements語句(如果這個類本身是一個接口,則應當是extends語句)后的接口順序從左到右排列在接口索引集合中。

類索引、父類索引和接口索引集合都按順序排列在訪問標志之后,類索引和父類索引用兩個u2類型的索引值表示,它們各自指向一個類型為CONSTANT_Class_info的類描述符常量,通過CONSTANT_Class_info類型的常量中的索引值可以找到定義在CONSTANT_Utf8_info類型的常量中的索引值可以找到定義在CONSTANT_Utf8_info類型的常量中的全限定名字符串。圖6-6演示了代碼清單6-1的代碼的類索引查找過程。對于接口索引集合,入口的第一項——u2類型的數(shù)據(jù)為接口計數(shù)器(interfaces_count),表示索引表的容量。如果該類沒有實現(xiàn)任何接口,則該計數(shù)器值為0,后面接口的索引表不再占用任何字節(jié)。

?

《深入理解Java虛擬機》讀書筆記:Class類文件的結構

                      圖6-6 類索引查找全限定名的過程

?

6 、字段表集合

  字段表(field_info)用于描述接口或者類中聲明的變量。字段(field)包括類級變量以及實例級變量,但不包括在方法內(nèi)部聲明的局部變量。我們可以想一想在Java中描述一個字段可以包含什么信息?可以包括的信息有:字段的作用域(public、private、protected修飾符)、是實例變量還是類變量(static修飾符)、可變性(final)、并發(fā)可見性(volatile修飾符,是否強制從主內(nèi)存讀寫)、可否被序列化(transient修飾符)、字段數(shù)據(jù)類型(基本類型、對象、數(shù)組)、字段名稱。上述這些信息中,各個修飾符都是布爾值,要么有某個修飾符,要么沒有,很適合使用標志位來表示。而字段叫什么名字、字段被定義為什么數(shù)據(jù)類型,這些都是無法固定的,只能引用常量池中的常量來描述。表6-8中列出了字段表的最終格式。

《深入理解Java虛擬機》讀書筆記:Class類文件的結構

                                表6-8 字段表結構

  字段修飾符放在access_flags項目中,它與類中的access_flags項目是非常類似的,都是一個u2的數(shù)據(jù)類型,其中可以設置的標志位和含義見表6-9。

?

《深入理解Java虛擬機》讀書筆記:Class類文件的結構

                                      表6-9 字段訪問標志

?

  很明顯,在實際情況中,ACC_PUBLIC、ACC_PRIVATE、ACC_PROTECTED三個標志最多只能選擇其一,ACC_FINAL、ACC_VOLATILE不能同時選擇。接口之中的字段必須有ACC_PUBLIC、ACC_STATIC、ACC_FINAL標志,這些都是由Java本身的語言規(guī)則所決定的。

  跟隨access_flags標志的是兩項索引值:name_index和descriptor_index。它們都是對常量池的引用,分別代表著字段的簡單名稱以及字段和方法的描述符。現(xiàn)在需要解釋一下“簡單名稱”、“描述符”以及前面出現(xiàn)過多次的“全限定名”這三種特殊字符串的概念。

全限定名和簡單名稱很好理解,以代碼清單6-1中的代碼為例,“
  org/fenixsoft/clazz/TestClass”是這個類的全限定名,僅僅是把類全名中的“.”替換成了“/”而已,為了使連續(xù)的多個全限定名之間不產(chǎn)生混淆,在使用時最后一般會加入一個“;”表示全限定名結束。簡單名稱是指沒有類型和參數(shù)修飾的方法或者字段名稱,這個類中的inc()方法和m字段的簡單名稱分別是“inc”和“m”。

  相對于全限定名和簡單名稱來說,方法和字段的描述符就要復雜一些。描述符的作用是用來描述字段的數(shù)據(jù)類型、方法的參數(shù)列表(包括數(shù)量、類型以及順序)和返回值。根據(jù)描述符規(guī)則,基本數(shù)據(jù)類型(byte、char、double、float、int、long、short、boolean)以及代表無返回值的void類型[插圖]都用一個大寫字符來表示,而對象類型則用字符L加對象的全限定名來表示,詳見表6-10。

《深入理解Java虛擬機》讀書筆記:Class類文件的結構

                                    表6-10 描述符標識字符含義

  字段表集合中不會列出從超類或者父接口中繼承而來的字段,但有可能列出原本Java代碼之中不存在的字段,譬如在內(nèi)部類中為了保持對外部類的訪問性,會自動添加指向外部類實例的字段。另外,在Java語言中字段是無法重載的,兩個字段的數(shù)據(jù)類型、修飾符不管是否相同,都必須使用不一樣的名稱,但是對于字節(jié)碼來講,如果兩個字段的描述符不一致,那字段重名就是合法的。

?

7、 方法表集合

  方法表的結構如同字段表一樣,依次包括了訪問標志(access_flags)、名稱索引(name_index)、描述符索引(descriptor_index)、屬性表集合(attributes)幾項,見表6-11。這些數(shù)據(jù)項目的含義也非常類似,僅在訪問標志和屬性表集合的可選項中有所區(qū)別。

?

《深入理解Java虛擬機》讀書筆記:Class類文件的結構

                                    表6-11 方法表結構

?

  因為volatile關鍵字和transient關鍵字不能修飾方法,所以方法表的訪問標志中沒有了ACC_VOLATILE標志和ACC_TRANSIENT標志。與之相對的,synchronized、native、strictfp和abstract關鍵字可以修飾方法,所以方法表的訪問標志中增加了ACC_SYNCHRONIZED、ACC_NATIVE、ACC_STRICTFP和ACC_ABSTRACT標志。對于方法表,所有標志位及其取值可參見表6-12。

?

《深入理解Java虛擬機》讀書筆記:Class類文件的結構

                                表6-12 方法訪問標志

?

?

8、屬性表集合

  屬性表(attribute_info)在前面的講解之中已經(jīng)出現(xiàn)過數(shù)次,在Class文件、字段表、方法表都可以攜帶自己的屬性表集合,以用于描述某些場景專有的信息。

在最新的《Java虛擬機規(guī)范(Java SE 7)》版中,預定義屬性已經(jīng)增加到21項,具體內(nèi)容見表6-13。下文中將對其中一些屬性中的關鍵常用的部分進行講解。

?

《深入理解Java虛擬機》讀書筆記:Class類文件的結構

                表6-13 虛擬機規(guī)范預定義的屬性

?

  對于每個屬性,它的名稱需要從常量池中引用一個CONSTANT_Utf8_info類型的常量來表示,而屬性值的結構則是完全自定義的,只需要通過一個u4的長度屬性去說明屬性值所占用的位數(shù)即可。一個符合規(guī)則的屬性表應該滿足表6-14中所定義的結構。

《深入理解Java虛擬機》讀書筆記:Class類文件的結構

                                    表6-14 屬性表結構

(1)Code屬性

  Java程序方法體中的代碼經(jīng)過Javac編譯器處理后,最終變?yōu)樽止?jié)碼指令存儲在Code屬性內(nèi)。Code屬性出現(xiàn)在方法表的屬性集合之中,但并非所有的方法表都必須存在這個屬性,譬如接口或者抽象類中的方法就不存在Code屬性。

(2)Exceptions屬性

  這里的Exceptions屬性是在方法表中與Code屬性平級的一項屬性,讀者不要與前面剛剛講解完的異常表產(chǎn)生混淆。Exceptions屬性的作用是列舉出方法中可能拋出的受查異常(Checked Excepitons),也就是方法描述時在throws關鍵字后面列舉的異常。

(3)LineNumberTable屬性

  LineNumberTable屬性用于描述Java源碼行號與字節(jié)碼行號(字節(jié)碼的偏移量)之間的對應關系。它并不是運行時必需的屬性,但默認會生成到Class文件之中,可以在Javac中分別使用-g:none或-g:lines選項來取消或要求生成這項信息。如果選擇不生成LineNumberTable屬性,對程序運行產(chǎn)生的最主要的影響就是當拋出異常時,堆棧中將不會顯示出錯的行號,并且在調(diào)試程序的時候,也無法按照源碼行來設置斷點。

(4)LocalVariableTable屬性

  LocalVariableTable屬性用于描述棧幀中局部變量表中的變量與Java源碼中定義的變量之間的關系,它也不是運行時必需的屬性,但默認會生成到Class文件之中,可以在Javac中分別使用-g:none或-g:vars選項來取消或要求生成這項信息。如果沒有生成這項屬性,最大的影響就是當其他人引用這個方法時,所有的參數(shù)名稱都將會丟失,IDE將會使用諸如arg0、arg1之類的占位符代替原有的參數(shù)名,這對程序運行沒有影響,但是會對代碼編寫帶來較大不便,而且在調(diào)試期間無法根據(jù)參數(shù)名稱從上下文中獲得參數(shù)值。

(5)SourceFile屬性

  SourceFile屬性用于記錄生成這個Class文件的源碼文件名稱。這個屬性也是可選的,可以分別使用Javac的-g:none或-g:source選項來關閉或要求生成這項信息。在Java中,對于大多數(shù)的類來說,類名和文件名是一致的,但是有一些特殊情況(如內(nèi)部類)例外。如果不生成這項屬性,當拋出異常時,堆棧中將不會顯示出錯代碼所屬的文件名。這個屬性是一個定長的屬性

(6)ConstantValue屬性

  ConstantValue屬性的作用是通知虛擬機自動為靜態(tài)變量賦值。只有被static關鍵字修飾的變量(類變量)才可以使用這項屬性。

(7)InnerClasses屬性

  InnerClasses屬性用于記錄內(nèi)部類與宿主類之間的關聯(lián)。如果一個類中定義了內(nèi)部類,那編譯器將會為它以及它所包含的內(nèi)部類生成InnerClasses屬性。

(8)Deprecated及Synthetic屬性

  Deprecated和Synthetic兩個屬性都屬于標志類型的布爾屬性,只存在有和沒有的區(qū)別,沒有屬性值的概念。Deprecated屬性用于表示某個類、字段或者方法,已經(jīng)被程序作者定為不再推薦使用,它可以通過在代碼中使用@deprecated注釋進行設置。Synthetic屬性代表此字段或者方法并不是由Java源碼直接產(chǎn)生的,而是由編譯器自行添加的,在JDK 1.5之后,標識一個類、字段或者方法是編譯器自動產(chǎn)生的,也可以設置它們訪問標志中的ACC_SYNTHETIC標志位,其中最典型的例子就是Bridge Method。所有由非用戶代碼產(chǎn)生的類、方法及字段都應當至少設置Synthetic屬性和ACC_SYNTHETIC標志位中的一項,唯一的例外是實例構造器“<init>”方法和類構造器“<clinit>”方法。

(9)StackMapTable屬性

  StackMapTable屬性在JDK 1.6發(fā)布后增加到了Class文件規(guī)范中,它是一個復雜的變長屬性,位于Code屬性的屬性表中。這個屬性會在虛擬機類加載的字節(jié)碼驗證階段被新類型檢查驗證器(Type Checker)使用(見7.3.2節(jié)),目的在于代替以前比較消耗性能的基于數(shù)據(jù)流分析的類型推導驗證器。

(10)Signature屬性

  Signature屬性在JDK 1.5發(fā)布后增加到了Class文件規(guī)范之中,它是一個可選的定長屬性,可以出現(xiàn)于類、屬性表和方法表結構的屬性表中。在JDK 1.5中大幅增強了Java語言的語法,在此之后,任何類、接口、初始化方法或成員的泛型簽名如果包含了類型變量(Type Variables)或參數(shù)化類型(Parameterized Types),則Signature屬性會為它記錄泛型簽名信息。

  之所以要專門使用這樣一個屬性去記錄泛型類型,是因為Java語言的泛型采用的是擦除法實現(xiàn)的偽泛型,在字節(jié)碼(Code屬性)中,泛型信息編譯(類型變量、參數(shù)化類型)之后都通通被擦除掉。使用擦除法的好處是實現(xiàn)簡單(主要修改Javac編譯器,虛擬機內(nèi)部只做了很少的改動)、非常容易實現(xiàn)Backport,運行期也能夠節(jié)省一些類型所占的內(nèi)存空間。但壞處是運行期就無法像C#等有真泛型支持的語言那樣,將泛型類型與用戶定義的普通類型同等對待,例如運行期做反射時無法獲得到泛型信息。Signature屬性就是為了彌補這個缺陷而增設的,現(xiàn)在Java的反射API能夠獲取泛型類型,最終的數(shù)據(jù)來源也就是這個屬性。

(11)BootstrapMethods屬性

  在JDK 1.7發(fā)布后增加到了Class文件規(guī)范之中,它是一個復雜的變長屬性,位于類文件的屬性表中。這個屬性用于保存invokedynamic指令引用的引導方法限定符?!禞ava虛擬機規(guī)范(Java SE 7版)》規(guī)定,如果某個類文件結構的常量池中曾經(jīng)出現(xiàn)過
CONSTANT_InvokeDynamic_info類型的常量,那么這個類文件的屬性表中必須存在一個明確的BootstrapMethods屬性,另外,即使CONSTANT_InvokeDynamic_info類型的常量在常量池中出現(xiàn)過多次,類文件的屬性表中最多也只能有一個BootstrapMethods屬性。BootstrapMethods屬性與JSR-292中的InvokeDynamic指令和java.lang.Invoke包關系非常密切,要介紹這個屬性的作用,必須先弄清楚InovkeDynamic指令的運作原理,筆者將在第8章專門用1節(jié)篇幅去介紹它們,在此先暫時略過。

  目前的Javac暫時無法生成InvokeDynamic指令和BootstrapMethods屬性,必須通過一些非常規(guī)的手段才能使用到它們。文章來源地址http://www.zghlxwxcb.cn/news/detail-649266.html

到了這里,關于《深入理解Java虛擬機》讀書筆記:Class類文件的結構的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 《深入理解Java虛擬機》讀書筆記:垃圾收集算法

    《深入理解Java虛擬機》讀書筆記:垃圾收集算法

    由于垃圾收集算法的實現(xiàn)涉及大量的程序細節(jié),而且各個平臺的虛擬機操作內(nèi)存的方法又各不相同,因此本節(jié)不打算過多地討論算法的實現(xiàn),只是介紹幾種算法的思想及其發(fā)展過程。 垃圾收集算法概要 ? 標記-清除算法最基礎的收集算法是“標記-清除”(Mark-Sweep)算法,算

    2024年02月13日
    瀏覽(19)
  • 《深入理解Java虛擬機》讀書筆記:HotSpot虛擬機對象探秘

    《深入理解Java虛擬機》讀書筆記:HotSpot虛擬機對象探秘

    基于實用優(yōu)先的原則,以常用的虛擬機HotSpot和常用的內(nèi)存區(qū)域Java堆為例,深入探討HotSpot虛擬機在Java堆中對象分配、布局和訪問的全過程。以下是本節(jié)內(nèi)容的腦圖。 ? HotSpot虛擬機對象探秘腦圖 ? 創(chuàng)建對象大致分為5步:1.檢查類是否加載,沒有加載先加載類 2.分配內(nèi)存 3.初始

    2024年02月14日
    瀏覽(19)
  • 《深入理解Java虛擬機》讀書筆記:字節(jié)碼指令簡介

    《深入理解Java虛擬機》讀書筆記:字節(jié)碼指令簡介

    字節(jié)碼指令簡介 ? Java虛擬機的指令由一個字節(jié)長度的、代表著某種特定操作含義的數(shù)字(稱為操作碼,Opcode)以及跟隨其后的零至多個代表此操作所需參數(shù)(稱為操作數(shù),Operands)而構成。由于Java虛擬機采用面向操作數(shù)棧而不是寄存器的架構(這兩種架構的區(qū)別和影響將在

    2024年02月12日
    瀏覽(20)
  • 《深入理解Java虛擬機》讀書筆記:垃圾收集器

    《深入理解Java虛擬機》讀書筆記:垃圾收集器

    垃圾收集器 ? HotSpot虛擬機包含的所有收集器如圖3-5所示。圖3-5展示了7種作用于不同分代的收集器,如果兩個收集器之間存在連線,就說明它們可以搭配使用。 新生代收集器:Serial、ParNew、Parallel Scavenge,新生代收集器均采用復制算法 老年代收集器:Serial Old(標記-整理算法

    2024年02月13日
    瀏覽(23)
  • 《深入理解Java虛擬機》讀書筆記:判斷對象是否存活

    《深入理解Java虛擬機》讀書筆記:判斷對象是否存活

    本節(jié)內(nèi)容的概要如下; 對象已死嗎? ? 給對象中添加一個引用計數(shù)器,每當有一個地方引用它時,計數(shù)器值就加1;當引用失效時,計數(shù)器值就減1;任何時刻計數(shù)器為0的對象就是不可能再被使用的。 客觀地說,引用計數(shù)算法(Reference Counting)的實現(xiàn)簡單,判定效率也很高,在

    2024年02月14日
    瀏覽(146)
  • 《深入理解Java虛擬機》讀書筆記:內(nèi)存分配與回收策略

    《深入理解Java虛擬機》讀書筆記:內(nèi)存分配與回收策略

    Java技術體系中所提倡的自動內(nèi)存管理最終可以歸結為自動化地解決了兩個問題:給對象分配內(nèi)存以及回收分配給對象的內(nèi)存。關于回收內(nèi)存這一點,我們已經(jīng)使用了大量篇幅去介紹虛擬機中的垃圾收集器體系以及運作原理,現(xiàn)在我們再一起來探討一下給對象分配內(nèi)存的那點事

    2024年02月13日
    瀏覽(27)
  • 《深入理解Java虛擬機》讀書筆記:HotSpot的算法實現(xiàn)

    《深入理解Java虛擬機》讀書筆記:HotSpot的算法實現(xiàn)

    HotSpot的算法實現(xiàn)概要 由于目前的主流Java虛擬機使用的都是準確式GC(這個概念在第1章介紹Exact VM對Classic VM的改進時講過),所以當執(zhí)行系統(tǒng)停頓下來后,并不需要一個不漏地檢查完所有執(zhí)行上下文和全局的引用位置,虛擬機應當是有辦法直接得知哪些地方存放著對象引用。

    2024年02月13日
    瀏覽(17)
  • 《深入理解Java虛擬機》讀書筆記: 虛擬機類加載的時機和過程

    《深入理解Java虛擬機》讀書筆記: 虛擬機類加載的時機和過程

    虛擬機類加載的時機和過程 類從被加載到虛擬機內(nèi)存中開始,到卸載出內(nèi)存為止,它的整個生命周期包括:加載(Loading)、驗證(Verification)、準備(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸載(Unloading)7個階段。其中驗證、準備、解析3個

    2024年02月12日
    瀏覽(25)
  • 《深入理解Java虛擬機》讀書筆記:基于棧的字節(jié)碼解釋執(zhí)行引擎

    《深入理解Java虛擬機》讀書筆記:基于棧的字節(jié)碼解釋執(zhí)行引擎

    ??虛擬機是如何調(diào)用方法的內(nèi)容已經(jīng)講解完畢,從本節(jié)開始,我們來探討虛擬機是如何執(zhí)行方法中的字節(jié)碼指令的。上文中提到過,許多Java虛擬機的執(zhí)行引擎在執(zhí)行Java代碼的時候都有 解釋執(zhí)行(通過解釋器執(zhí)行) 和 編譯執(zhí)行(通過即時編譯器產(chǎn)生本地代碼執(zhí)行) 兩種選

    2024年02月11日
    瀏覽(51)
  • 《深入理解Java虛擬機(第三版)》讀書筆記:Java內(nèi)存區(qū)域與內(nèi)存溢出異常、垃圾收集器與內(nèi)存分配策略

    《深入理解Java虛擬機(第三版)》讀書筆記:Java內(nèi)存區(qū)域與內(nèi)存溢出異常、垃圾收集器與內(nèi)存分配策略

    下文是閱讀《深入理解Java虛擬機(第3版)》這本書的讀書筆記,如有侵權,請聯(lián)系刪除。 Java虛擬機在執(zhí)行Java程序的過程中會把它所管理的內(nèi)存劃分為若干個不同的數(shù)據(jù)區(qū)域。這些區(qū)域有各自的用途,以及創(chuàng)建和銷毀的時間,有的區(qū)域隨著虛擬機進程的啟動而一直存在,有

    2024年02月03日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包