日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java虚拟机编译文件,理解Java虚拟机(1)之一个.java文件编译成.class文件发生了什么...

發(fā)布時間:2023/12/9 java 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java虚拟机编译文件,理解Java虚拟机(1)之一个.java文件编译成.class文件发生了什么... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

理解Java虛擬機(1)之一個.java文件編譯成.class文件發(fā)生了什么

最近在看《深入理解Java虛擬機》弄明白了很多java的底層知識,決定分幾部分總結(jié)下,從.java文件編譯,到類加載機制,內(nèi)存分配

垃圾回收機制,線程并發(fā),鎖機制。

JVM虛擬機只能識別.class文件這種字節(jié)碼文件,然后將字節(jié)碼翻譯成可執(zhí)行的0,1;這個說明了JVM具有語言無關(guān)性,不僅僅是平臺無關(guān)性,這也是scala,Grovvy,JRUby….能在JVM上運行的原因,各種語言通過不同的編譯器將其編譯成.class文件

從上面圖可以看出來JVM支持很多語言,只要有語言的編譯器編譯成.class文件,順帶說下scala是函數(shù)式語言,在高并發(fā)領(lǐng)域很流行的,有人說java不靈活,其實完全可以JVM語言混編,底層并發(fā)用scala,業(yè)務(wù)層用java。下面下個java類看看具體編譯成class文件。

public class TestClass{

private int id;

public String name;

public void sayHello(){

System.out.print("hello class ");

}

}

編譯javac -TestClass.java,編譯后class文件TestClass.class如下

cafe babe 0000 0033 0020 0a00 0600 1209

0013 0014 0800 150a 0016 0017 0700 1807

0019 0100 0269 6401 0001 4901 0004 6e61

6d65 0100 124c 6a61 7661 2f6c 616e 672f

5374 7269 6e67 3b01 0006 3c69 6e69 743e

0100 0328 2956 0100 0443 6f64 6501 000f

4c69 6e65 4e75 6d62 6572 5461 626c 6501

0008 7361 7948 656c 6c6f 0100 0a53 6f75

7263 6546 696c 6501 000e 5465 7374 436c

6173 732e 6a61 7661 0c00 0b00 0c07 001a

0c00 1b00 1c01 000c 6865 6c6c 6f20 636c

6173 7320 0700 1d0c 001e 001f 0100 1b63

6f6d 2f68 632f 7365 7276 6963 6549 6d70

2f54 6573 7443 6c61 7373 0100 106a 6176

612f 6c61 6e67 2f4f 626a 6563 7401 0010

6a61 7661 2f6c 616e 672f 5379 7374 656d

0100 036f 7574 0100 154c 6a61 7661 2f69

6f2f 5072 696e 7453 7472 6561 6d3b 0100

136a 6176 612f 696f 2f50 7269 6e74 5374

7265 616d 0100 0570 7269 6e74 0100 1528

4c6a 6176 612f 6c61 6e67 2f53 7472 696e

673b 2956 0021 0005 0006 0000 0002 0002

0007 0008 0000 0001 0009 000a 0000 0002

0001 000b 000c 0001 000d 0000 001d 0001

0001 0000 0005 2ab7 0001 b100 0000 0100

0e00 0000 0600 0100 0000 0600 0100 0f00

0c00 0100 0d00 0000 2500 0200 0100 0000

09b2 0002 1203 b600 04b1 0000 0001 000e

0000 000a 0002 0000 000c 0008 000d 0001

0010 0000 0002 0011

classs文件采用類似C語言結(jié)構(gòu)體偽數(shù)據(jù)結(jié)構(gòu)來存儲數(shù)據(jù),有2種數(shù)據(jù)類型無符號數(shù)和表,無符號數(shù)屬于基本類型,以u1、u2、u4、u8分別代表1字節(jié)、2字節(jié)、4字節(jié)和8字節(jié)。無符號數(shù)可以用來描述數(shù)字、索引引用、數(shù)量值或者按照UTF-8編碼組成的字符串表是有多個無符號數(shù)或者其他表作為數(shù)據(jù)項構(gòu)成的符合數(shù)據(jù)類型,所有表都習(xí)慣性地以info結(jié)尾。Class文件本質(zhì)上就是一張表。

下面舉幾個字節(jié)碼的含義

魔數(shù) 打頭的”0xcafebabe”用來確定這個文件是否虛擬機能夠接受的Class文件,固定值為0xCAFEBABE,它的作用是確定這個文件是否唯一能被虛擬機接受的Class文件,gif,jpg等文件頭都存有魔數(shù)

版本,緊跟魔數(shù)后面的就是版本了,”0000 0033”,表示jdk1.7.0

下面是class文件版本號(參照《深入理解java虛擬機》)

就舉這2個例子,對.class文件有個大概認識。

特么的,大夏天的感冒了,看書沒動力,看書都沒動力,接下來寫java類的加載機制

總結(jié)

以上是生活随笔為你收集整理的java虚拟机编译文件,理解Java虚拟机(1)之一个.java文件编译成.class文件发生了什么...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。