久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

面試官:什么是字節(jié)碼,?它最大的優(yōu)勢是什么,?

 田維常 2020-09-17

回復(fù)“面試”獲取全套面試資料

么是字節(jié)

這個問題,,面試官可以衍生提問,,Java 是編譯執(zhí)行的語言,還是解釋執(zhí)行的語言,。

Java 中引入了虛擬機的概念,,即在機器和編譯程序之間加入了一層抽象的虛擬的機器。這臺虛擬的機器在任何平臺上都提供給編譯程序一個的共同的接口。

編譯程序只需要面向虛擬機,,生成虛擬機能夠理解的代碼,,然后由解釋器來將虛擬機代碼轉(zhuǎn)換為特定系統(tǒng)的機器碼執(zhí)行。在 Java 中,,這種供虛擬機理解的代碼叫做字節(jié)碼(即擴展名為 .class 的文件),,它不面向任何特定的處理器,只面向虛擬機,。

隨便找一個項目匯總的.class文件,,然后使用16進制的方法查看:

0000000: cafe babe 0000 0034 0061 0a00 1600 4709  .......4.a....G.
00000100005 0048 0900 0500 4909 0005 0040700  ...H....I....J..
00000204b0a 0005 0040a00 0500 4d0a 0016 004e  K....L....M....N
00000300a00 0500 4f0a 0005 0050 0a00 1600 5107  ....O....P....Q.
00000400052 0a00 0c00 4708 0053 0a00 0c00 540a  .R....G..S....T.
00000500000055 0800 5608 0057 0a00 0c00 5808  ...U..V..W....X.
00000600059 0a00 0c00 5a07 0050700 5c01 0005  .Y....Z..[..\...
00000707461 6749 6401 0013 4c6a 6176 612f 6c61  tagId...Ljava/la
00000806e67 2f49 6e74 6567 6572 3b01 0007 7461  ng/Integer;...ta
0000090674616d 6501 0012 4c6a 6176 612f 6c61  gName...Ljava/la
00000a0: 6e67 2f53 7472 6966730100 0574 6f74  ng/String;...tot
00000b0: 6160100 0149 0100 0636966974 3e01  al...I...<init>.
00000c0: 0003 2829 5601 0004 436f 6465 0100 0f4c  ..()V...Code...L00000d0: 696654756d 6265 7254 6162 6c65 0100  ineNumberTable..
00000e01246f63 6165661 7269 6162 6c65 5461  .LocalVariableTa
00000f0: 6266501 0004 7468 6973 0100 1f4c 636f  ble...this...Lco
00001006d2f 6a61 7661 2f74 6961 6e2f 6266f67  m/java/tian/blog
00001102f65 6e74 6974 792f 5461 6730100 0867  /entity/Tag;...g
00001206574 5461 6749 6401 0015 2829 4c6a 6176  etTagId...()Ljav
0000130612f 6c61 6e67 2f49 6e74 6567 6572 3b01  a/lang/Integer;.00001400006765 7454 6167 4e61 6d65 0100 1428  ..getTagName...(00001502946a61 7661 2f6c 616672f 5374 7269  )Ljava/lang/Stri0000160: 6e67 3b01 0008 6765 7454 6f74 6160100  ng;...getTotal..00001700328 2949 0100 0873 6574 5461 6749 6401  .()I...setTagId.00001800016 2846a61 7661 2f6c 616672f 496e  ..(Ljava/lang/In
00001907465 6765 7232956 0100 104d 6574 686f  teger;)V...Metho
00001a0: 6450 6172 616d 6574 6572 7301 0007365  dParameters...se
00001b0: 7454 6167 4e61 6d65 0100 1528 4c6a 6176  tTagName...(Ljav00001c0: 612f 6c61 6e67 2f53 7472 6966732956  a/lang/String;)V
00001d0: 0100 0873 6574 546f 7461 6c01 0004 2849  ...setTotal...(I
00001e02956 0100 0665 7175 6167301 0015 284c  )V...equals...(L00001f0: 6a61 7661 2f6c 616672f 4f62 6a65 6374  java/lang/Object
00002003b29 5a01 0001 6f01 0012 4c6a 6176 612f  ;)Z...o...Ljava/
00002106c61 6e67 2f4f 6266563 7430100 056f  lang/Object;...o
00002207468 6572 0100 0a74 6869 7324 7461 6749  ther...this$tagI
00002306401 0006f74 6865 7224 7461 6749 6401  d...other$tagId.
00002400007468 6973 2474 6167 4e61 6d65 0100  ..this$tagName..
00002500d6f 7468 6572 2474 6167 4e61 6d65 0100  .other$tagName..
00002600d53 7461 6364d61 7054 6162 6c65 0700  .StackMapTable..
00002704b07 0050100 0863 6164571 7561 6c01  K..[...canEqual.
00002800008 6861 7368 436f 6465 0100 0550 5249  ..hashCode...PRI
00002904d45 0100 0672 6573 7567401 0006 2474  ME...result...$t
00002a0: 6167 4964 0100 0824 7461 674616d 6501  agId...$tagName.
00002b0: 0008 746f 5374 7269 6e67 0100 0a53 6f75  ..toString...Sou
00002c0: 7263 6546 6966501 0008 5461 6726a61  rceFile...Tag.ja
00002d0: 7661 0c00 1e00 1f0c 0018 0019 0c00 1a00  va..............
00002e01b0c 001001d 0100 1d63 6f6d 2f6a 6176  .........com/jav
00002f0: 612f 7469 6162f62 6c6f 672f 6567469  a/tian/blog/enti
00003007479 2f54 6167 0c00 3e00 3300025 0026  ty/Tag..>.3..%.&
00003100c00 3200 3300027 0028 0c00 2900 2a0c  ..2.3..'.(..).*.
0000320: 003f 002a 0100 176a 6176 612f 6c61 6e67  .?.*...java/lang
0000330: 2f53 7472 696e 6742 7569 6c64 6572 0100  /StringBuilder..
0000340: 0a54 6167 2874 6167 4964 3d0c 005d 005e  .Tag(tagId=..].^
0000350: 0c00 5d00 5f01 000a 2c20 7461 674e 616d  ..]._..., tagNam
0000360: 653d 0100 082c 2074 6f74 616c 3d0c 005d  e=..., total=..]
25 lines filtered                                                

查看方式是先使用vim將.class文件打開,然后輸入:%!xxd然后就可以看到cafe babe開頭的字節(jié)碼了,。

另外一種方式查看字節(jié)碼的方式:xxd Tag.class Tag.txt和上面一樣,。

二進制與16進制轉(zhuǎn)換還有其他一些方式,如下:

以十六進制格式輸出:
od [選項] 文件
od -d 文件  十進制輸出
-o 文件  八進制輸出
-x 文件  十六進制輸出
xxd 文件  輸出十六進制

在vi命令狀態(tài)下:
:%!xxd   :%!od    將當(dāng)前文本轉(zhuǎn)化為16進制格式
:%!xxd -c 12 每行顯示12個字節(jié)
:%!xxd -r    將當(dāng)前文本轉(zhuǎn)化回文本格式

上面的字節(jié)碼看起來是不是很無語,,很多人是對其很厭煩,。其實也沒那么難的。

每一種平臺的解釋器是不同的,,但是實現(xiàn)的虛擬機是相同的,。Java 源程序經(jīng)過編譯器編譯后變成字節(jié)碼,字節(jié)碼由虛擬機解釋執(zhí)行,,虛擬機將每一條要執(zhí)行的字節(jié)碼送給解釋器,,解釋器將其翻譯成特定機器上的機器碼,然后在特定的機器上運行,。這也就是解釋了 Java 的編譯與解釋并存的特點,。

Java 源代碼
=> 編譯器 => JVM 可執(zhí)行的 Java 字節(jié)碼(即虛擬指令)
=> JVM => JVM 中解釋器 => 機器可執(zhí)行的二進制機器碼 => 程序運行
采用字節(jié)碼的好處?

Java 語言通過字節(jié)碼的方式,,在一定程度上解決了傳統(tǒng)解釋型語言執(zhí)行效率低的問題,,同時又保留了解釋型語言可移植的特點。所以 Java 程序運行時比較高效,,而且,,由于字節(jié)碼并不專對一種特定的機器,因此,,Java程序無須重新編譯便可在多種不同的計算機上運行,。

解釋型語言:解釋型語言,是在運行的時候?qū)⒊绦蚍g成機器語言,。解釋型語言的程序不需要在運行前編譯,,在運行程序的時候才翻譯,專門的解釋器負責(zé)在每個語句執(zhí)行的時候解釋程序代碼,。這樣解釋型語言每執(zhí)行一次就要翻譯一次,,效率比較低,。——百度百科

例如:Python,、PHP ,。

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多