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

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

快速了解字節碼是什么

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

一、什么是字節碼

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
}

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

它們倆是怎么轉換的?

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

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

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 巨大欧美黑人xxxxbbbb | 在线播放另类 | 午夜视频久久 | 国产一级特黄aa大片免费 | 500福利笫一精品导航 | 免费看黄色网址 | 国产97视频在线 | 天天操夜夜操美女 | 欧美精品福利在线视频 | 欧美在线精品一区二区在线观看 | 宅男天堂影院 | 亚洲中文毛片播九公社 | 欧美整片第一页 | 青青草国产免费国产是公开 | 国产性xxx| 中文字幕天天躁日日躁狠狠 | 最近的中文字幕视频完整 | 任你躁在线精品免费视频网站 | 黄色片视频在线播放 | 亚洲视频中文字幕在线观看 | 深夜福利网站在线观看 | 99艾草视频在线播放 | 亚洲午夜免费 | 欧美精品亚洲精品日韩 | 亚洲精品视频在线播放 | 99热在线免费播放 | 人人做人人爽人人爱 | 三级黄网站 | 国产一区二区三区四 | 亚洲精品另类有吗中文字幕 | 国产一二三四区中 | 香港三级日本三级a视频 | 午夜影院免费视频 | 国产日韩精品欧美一区色 | 亚洲综合激情在线影院 | www.亚洲一区二区三区 | 波多野结衣久久精品免费播放 | 91在线亚洲精品专区 | 亚洲色图综合网 | 国产1区2区3区在线观看 | 免费羞羞网站视频 |