窺一斑而知全豹,幾分鐘帶你讀懂Java字節碼,再也不怕了

      網友投稿 840 2025-04-02

      目錄


      1、如何看字節碼

      2、一個簡單的例子

      3、字節碼結構

      4、總結:

      窺一斑而知全豹,幾分鐘帶你讀懂Java字節碼,再也不怕了

      引言:都知道java的源文件最后會被編譯成class文件,class文件的內容是字節碼。為什么java要編譯成字節碼吶?我覺得最主要的原因是Java想要做到的跨平臺。只要有虛擬機,在任何平臺的表現都一樣的,屏蔽了系統層的不同,并且不像C,C++ 等語言編譯成和平臺相關的機器碼。同時也給其他的語言提供了在虛擬機運行的機會,只要是符合規范的class文件,不管是什么語言編譯出來的都可以。比如scala,kotlin等等。

      1、如何看字節碼

      原生的字節碼看起來實在費勁,讓我想起了匯編,記不住太多的指令,有沒有什么好的方式能既學習下字節碼,也不至于勸退吶。?idea 自帶的字節碼工具能完美解決這個問題。怎么用吶?

      創建Java文件,并且編譯后,選中文件后,點view -> Show ByteCode。彈出字節碼文件。

      2、一個簡單的例子

      首先看下java源碼。一個非常簡單的只有一個屬性,兩個方法的類。

      來吧,一起看下字節碼這個損色。請快速的掃過,不必深究細節,因為下面我會一行一行的解釋。

      // class version 52.0 (52)

      // access flags 0x21

      public class org/pdool/d20200923/GamWatcher {

      // compiled from: GamWatcher.java

      // access flags 0x0

      I age

      // access flags 0x1

      public ()V

      L0

      LINENUMBER 6 L0

      ALOAD 0

      INVOKESPECIAL java/lang/Object. ()V

      RETURN

      L1

      LOCALVARIABLE this Lorg/pdool/d20200923/GamWatcher; L0 L1 0

      MAXSTACK = 1

      MAXLOCALS = 1

      // access flags 0x1

      public getAge()I

      L0

      LINENUMBER 9 L0

      ALOAD 0

      GETFIELD org/pdool/d20200923/GamWatcher.age : I

      IRETURN

      L1

      LOCALVARIABLE this Lorg/pdool/d20200923/GamWatcher; L0 L1 0

      MAXSTACK = 1

      MAXLOCALS = 1

      // access flags 0x1

      public setAge(I)V

      L0

      LINENUMBER 12 L0

      ALOAD 0

      ILOAD 1

      PUTFIELD org/pdool/d20200923/GamWatcher.age : I

      L1

      LINENUMBER 13 L1

      RETURN

      L2

      LOCALVARIABLE this Lorg/pdool/d20200923/GamWatcher; L0 L2 0

      LOCALVARIABLE age I L0 L2 1

      MAXSTACK = 2

      MAXLOCALS = 2

      }

      3、字節碼結構

      可真嚇人,獨坐敬亭山,相看兩討厭,看不懂啊。下面一起讀一下。幾乎都注釋了,應該看得懂吧。

      一個最簡單的字節碼文件就是這樣,看起來似乎不難,所有的單詞也都認識,大概猜一下也能理解。既然有概念了,下面就列舉一下,對著字節碼讀一下也就大概懂了。

      方法調用指令。

      4、總結:關注我公眾號【香菜聊游戲】

      字節碼指令很多,我們也沒必要全部都懂,都能記住,只要在需要查看的時候能根據文檔讀明白,理解其中的含義,知道class的文件結構,畢竟我們是面向開發,不是面向研究,知其然知其所以然夠了,不用花太多的精力在上面。加油哦。

      寫文章不容易,求轉發,關注我的公眾號【香菜聊游戲】,說不定會有驚喜哦。

      Java

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:excel表格解除保護的方法(Excel表格怎么解除保護)
      下一篇:如何設置表格打印時的頁眉頁腳(excel打印頁眉頁腳怎么設置)
      相關文章
      亚洲国产综合无码一区二区二三区| 亚洲色成人WWW永久在线观看 | 蜜芽亚洲av无码一区二区三区| 亚洲制服丝袜在线播放| 亚洲视频一区网站| 亚洲精品不卡视频| 亚洲图片校园春色| 亚洲第一页在线视频| 亚洲图片激情小说| 久久亚洲精品专区蓝色区| 亚洲av无码专区在线| 亚洲www在线观看| 亚洲一本一道一区二区三区| 亚洲人成欧美中文字幕| 亚洲男人的天堂网站| 亚洲AV无码国产剧情| 亚洲国产成人AV网站| www.亚洲一区| 中文字幕亚洲激情| 国产亚洲精品不卡在线| 亚洲乱码一区二区三区在线观看| 亚洲国产精品无码久久SM| 亚洲三级电影网站| 亚洲精品中文字幕无乱码| 亚洲娇小性xxxx色| 亚洲国产精品精华液| 国产亚洲综合久久| 亚洲一区二区三区无码影院| 国产亚洲综合一区柠檬导航| 亚洲av日韩av不卡在线观看| 亚洲视频一区二区三区| 精品久久亚洲中文无码| 亚洲国产精品成人综合色在线| 亚洲Av无码乱码在线观看性色| 国产亚洲精品线观看动态图| 亚洲成AV人片天堂网无码| 亚洲老熟女@TubeumTV| 国产精品高清视亚洲一区二区| 亚洲成a人片在线观看天堂无码| 亚洲国产精品毛片av不卡在线| 亚洲无人区一区二区三区|