黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 快速了解字節碼是什么

快速了解字節碼是什么

更新時間:2022-12-15 16:47:32 來源:動力節點 瀏覽1254次

一、什么是字節碼

1. 先來說一下什么是機械碼

機械碼就是cpu能夠直接讀取并運行的代碼,它是用二進制編碼表示的,也叫做機械指令碼。在編寫這種代碼時,需要主動地去控制cpu的一切資源,而且需要記住全部指令所做的動作,十分的麻煩,當然這也是計算機的底層代碼,處理開發計算機的專業人員之外,已經很少人去研究了。

2.字節碼

字節碼是一種中間狀態的二進制文件,是由源碼編譯過來的,可讀性沒有源碼的高。cpu并不能直接讀取字節碼,在java中,字節碼需要經過JVM轉譯成機械碼之后,cpu才能讀取并運行。

3.使用字節碼的好處

一處編譯,到處運行。java就是典型的使用字節碼作為中間語言,在一個地方編譯了源碼,拿著.class文件就可以在各種計算機運行,每個計算機上的jvm就會有所不同了。

4.字節碼在JVM中的狀態

字節碼是什么

5.額外提一點

編譯型語言

只需要編譯一次,就能夠將源代碼編譯成機械碼。執行效率高,可移植性低,依賴編譯器。

典型代表:C、C++、Pascal、Object-C以及最近很火的蘋果新語言swift,GO

解釋型語言

在第一次編譯時,并不會直接將源代碼編譯成機械碼,而是編譯成一種中間狀態的二進制文件(字節碼),由虛擬機來對這個二進制文件進行第二次編譯,這次才是編譯成機械碼。執行效率比編譯型語言低,但是可移植性高,依賴虛擬機。

典型代表:JavaScript、Python、Erlang、PHP、Perl、Ruby

二、java中的字節碼

1.查看字節碼的方式

首先打開idea,在里面創建一個.java文件

package test;

public class ByteCodeTest {
    private int a = 0;
    public int get() {
        return a;
    }
}

然后在另一個類上,運行main方法,調用這個類

2.找到編譯后的.class文件

out文件夾下面會多出一個我們剛剛編寫的java文件相同名稱的.class文件

字節碼是什么

3.下載一個Sublime Text,然后打開.class文件

cafe babe 0000 0034 0016 0a00 0400 1209
0003 0013 0700 1407 0015 0100 0161 0100
0149 0100 063c 696e 6974 3e01 0003 2829
5601 0004 436f 6465 0100 0f4c 696e 654e
756d 6265 7254 6162 6c65 0100 124c 6f63
616c 5661 7269 6162 6c65 5461 626c 6501
0004 7468 6973 0100 134c 7465 7374 2f42
7974 6543 6f64 6554 6573 743b 0100 0367
6574 0100 0328 2949 0100 0a53 6f75 7263
6546 696c 6501 0011 4279 7465 436f 6465
5465 7374 2e6a 6176 610c 0007 0008 0c00
0500 0601 0011 7465 7374 2f42 7974 6543
6f64 6554 6573 7401 0010 6a61 7661 2f6c
616e 672f 4f62 6a65 6374 0021 0003 0004
0000 0001 0002 0005 0006 0000 0002 0001
0007 0008 0001 0009 0000 0038 0002 0001
0000 000a 2ab7 0001 2a03 b500 02b1 0000
0002 000a 0000 000a 0002 0000 0003 0004
0004 000b 0000 000c 0001 0000 000a 000c
000d 0000 0001 000e 000f 0001 0009 0000
002f 0001 0001 0000 0005 2ab4 0002 ac00
0000 0200 0a00 0000 0600 0100 0000 0600
0b00 0000 0c00 0100 0000 0500 0c00 0d00
0000 0100 1000 0000 0200 11

2.一個疑惑

我也希望有大佬能夠解答一下我疑惑,我去查百度也找不到答案,可能是我搜索方式有問題。

上面是.class文件的十六進制形式

在idea中有這樣一個功能,view->Show ByteCode

用這個功能打開的是

// class version 52.0 (52)
// access flags 0x21
public class test/ByteCodeTest {

  // compiled from: ByteCodeTest.java

  // access flags 0x2
  private I a

  // access flags 0x1
  public <init>()V
   L0
    LINENUMBER 3 L0
    ALOAD 0
    INVOKESPECIAL java/lang/Object.<init> ()V
   L1
    LINENUMBER 4 L1
    ALOAD 0
    ICONST_0
    PUTFIELD test/ByteCodeTest.a : I
    RETURN
   L2
    LOCALVARIABLE this Ltest/ByteCodeTest; L0 L2 0
    MAXSTACK = 2
    MAXLOCALS = 1

  // access flags 0x1
  public get()I
   L0
    LINENUMBER 6 L0
    ALOAD 0
    GETFIELD test/ByteCodeTest.a : I
    IRETURN
   L1
    LOCALVARIABLE this Ltest/ByteCodeTest; L0 L1 0
    MAXSTACK = 1
    MAXLOCALS = 1
}

我想知道這個跟十六進制文件的區別是什么?

它們倆是怎么轉換的?

以上就是動力節點小編介紹的"快速了解字節碼是什么",希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為您務。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 日韩中文字幕视频在线观看 | 日本特级黄色 | 波多野结衣精品一区二区三区 | 小娜的荡高h放荡日记 | 欧美成人怡春院在线激情 | 91成人在线免费视频 | 欧美在线播放成人a | 免费在线观看毛片 | 国产亚洲成在线播放va | 亚洲欧美强伦一区二区另类 | 老湿影院免费在线观看 | 欧美精品人爱c欧美精品 | 欧美va免费大片 | 国产精品久久久久影院色老大 | 男人的天堂黄色片 | 一个人看www在线视频 | 久久国产高清一区二区三区 | h视频在线免费观看 | 人成在线视频 | 91桃色国产线观看免费 | 天天色天天操天天射 | 日韩天堂视频 | 日韩精品一区二区三区中文 | 一级片按摩 | 成年人在线视频网站 | 久久人人爽人人爽人人 | 久久99精品久久久久久秒播放器 | 亚洲毛片在线免费观看 | 国产精品久久久亚洲动漫 | 亚洲日本韩国欧美 | 下面一进一出好爽视频 | www.黄色网址| 亚洲欧美另类第一页 | 成人午夜免费视频毛片 | 成人不卡在线 | 五月激情六月 | 日韩高清片| 一个人的视频日本免费 | 亚洲色图第1页 | 欧美亚洲综合在线 | 成人精品人成网站 |