日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 單片機(jī) > 架構(gòu)師社區(qū)
[導(dǎo)讀]原文:https://bbs.huaweicloud.com/blogs/250559當(dāng)你學(xué)會(huì)了java語(yǔ)言之后,你寫(xiě)了一些代碼,然后你想要執(zhí)行你的代碼,來(lái)達(dá)成某些功能。那么,你都知道這段代碼都是如何執(zhí)行的嗎?1.編譯成class眾所周知,java代碼是不能直接在jvm上執(zhí)行的,...

原文:https://bbs.huaweicloud.com/blogs/250559

當(dāng)你學(xué)會(huì)了java語(yǔ)言之后,你寫(xiě)了一些代碼,然后你想要執(zhí)行你的代碼,來(lái)達(dá)成某些功能。那么,你都知道這段代碼都是如何執(zhí)行的嗎?

1. 編譯成class

眾所周知,java代碼是不能直接在jvm上執(zhí)行的,執(zhí)行的是class文件,將java代碼編程class文件,需要編譯

常用的編譯方法是:javac xxx.java

但目前常見(jiàn)的java編輯工具,如eclipse和ideal都自帶自動(dòng)編譯動(dòng)能

2. jvm的構(gòu)成

讓我們回憶一下jvm的構(gòu)成:

一段java代碼是如何執(zhí)行的?
主題上分為五個(gè)部分:

方法區(qū),本地方法棧,java堆,java棧,程序計(jì)數(shù)器

其中,java棧,本地方法棧,程序計(jì)數(shù)器為線程私有,其余為線程共享

那么,方法在哪個(gè)地方執(zhí)行呢?

java棧。

棧的遵循的方式是先進(jìn)后出,java棧中方法的執(zhí)行也遵循此規(guī)律,方法執(zhí)行的步驟又稱(chēng)為棧幀。

3. 方法的順序執(zhí)行和棧幀

上代碼:

Java 代碼

public?class?Main?{
????public?static?void?a(){
????????b();
????}

????public?static?void?b(){
????????c();
????}

????public?static?void?c(){
????????System.out.println("Hello?world!");
????}

????public?static?void?main(String[]?args)?{
????????a();
????}
}
上面是一段很簡(jiǎn)單的代碼,主體上就是:

(1)一個(gè)Main類(lèi)

(2)上面定義了一個(gè)main方法

(3)該main方法調(diào)用了靜態(tài)方法a

(4)方法a調(diào)用方法b

(5)方法b調(diào)用方法c

(6)方法c打印了“Hello world!”

前文說(shuō)過(guò),java定義的非本地方法都是在java棧內(nèi)執(zhí)行的,一方法一棧幀

所以假設(shè)

mian方法對(duì)應(yīng)棧幀m

  • a方法對(duì)應(yīng)棧幀a

  • b方法對(duì)應(yīng)棧幀b

  • c方法對(duì)應(yīng)棧幀c

根據(jù)方法的調(diào)用,入棧順序?yàn)椋簃,a,b,c

所以,棧幀出棧(即方法執(zhí)行)順序?yàn)椋篶,b,a,m

4. class文件反編譯過(guò)后的樣子

上一節(jié),方法或棧幀在java棧的執(zhí)行順序,但在方法體內(nèi)的內(nèi)容是怎么執(zhí)行的呢。

前文提到,jvm執(zhí)行的是class文件,而class文件內(nèi)是什么?

class文件內(nèi)是一組指令集。

如何證明呢,還是再看一段代碼。

Java 代碼

public?class?Calculator{
????public?int?add(){
????????int?n?=?10;
????????int?m?=?20;
????????int?r?=?n? ?m;
????????return?r;
????}

????public?static?void?main(String[]?args)?{
????????Calculator?calculator?=?new?Calculator();
????????int?a?=?calculator.add();
????????System.out.println(a);
????}
}
如上代碼,實(shí)現(xiàn)的功能是:

(1)定義兩個(gè)變量,相加

(2)main方法new對(duì)象,調(diào)用方法

但,class文件是不可以直接查看的。

我們可以采用反編譯的方法,反編譯命令:

javap -c xxx.class

一段java代碼是如何執(zhí)行的?
上述文件反編譯后的樣子如下:

一段java代碼是如何執(zhí)行的?
每個(gè)方法下面的Code,都是一組指令集。

5. 指令集詳解

在討論指令集之前,首先要講一個(gè)概念,那就是對(duì)棧幀進(jìn)一步拆分。

棧幀一共分為四個(gè)部分:局部變量表、操作數(shù)棧、動(dòng)態(tài)鏈接、方法返回地址

其中,局部變量表和操作數(shù)棧是最重要的兩個(gè)部分,局部變量表存放在方法中定義的局部變量,操作數(shù)棧相當(dāng)于jvm的一個(gè)緩存,所有的操作都必須在此處進(jìn)行,所有的變量都必須加載到操作數(shù)棧才能被使用。所以,所謂指令,就是在局部變量表和操作數(shù)棧來(lái)回倒騰的過(guò)程。

下面對(duì)指令進(jìn)行分類(lèi)講解:

(1)入棧指令

整型入棧指令:

  • 取值-1~5采用iconst指令;

  • 取值-128~127采用bipush指令;

  • 取值-32768~32767采用sipush指令;

  • 取值-2147483648~2147483647采用ldc指令。

非整型入棧指令:

  • float,String類(lèi)型也使用ldc指令

  • double和long類(lèi)型使用ldc_2w

  • boolean類(lèi)型視作0和1

  • null的入棧指令為:aconst_null

(2)存儲(chǔ)指令

將操作數(shù)棧中的常量保存在局部變量表中的某個(gè)位置

如:

  • istore_1:將上面入棧的整型常量保存在局部變量表中的第1個(gè)位置

  • fstore_2:將上面入棧的浮點(diǎn)常量保存在局部變量表中的第2個(gè)位置

  • dstore_10:將上面入棧的雙浮點(diǎn)常量保存在局部變量表中的第10個(gè)位置

  • lstore_20:將上面入棧的長(zhǎng)整常量保存在局部變量表中的第20個(gè)位置

  • astore_100:將上面入棧的引用常量保存在局部變量表中的第100個(gè)位置

(3)變量入棧指令

  • iload_1:局部變量表中的第1個(gè)位置的整型變量入棧

  • fload_2:局部變量表中的第1個(gè)位置的浮點(diǎn)型變量入棧

  • dload_10:局部變量表中的第1個(gè)位置的雙浮點(diǎn)型變量入棧

  • lload_20:局部變量表中的第1個(gè)位置的長(zhǎng)整型變量入棧

  • aload_100:局部變量表中的第100個(gè)位置的引用型變量入棧

(4)計(jì)算指令

  • 加:iadd、ladd、fadd、dadd
    減:isub、lsub、fsub、dsub
    乘:imul、lmul、fmul、dmul
    除:idiv、ldiv、fdiv、ddiv

注意:棧頂計(jì)算,一次只能計(jì)算一個(gè)表達(dá)式

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀

深圳2026年3月19日 /美通社/ -- 2026年的招聘市場(chǎng),正陷入一場(chǎng)奇特的"算法互博":求職者用AI美化簡(jiǎn)歷以通過(guò)篩選,企業(yè)用AI深挖細(xì)節(jié)以識(shí)別真?zhèn)?。這場(chǎng)博弈的背后,是簡(jiǎn)歷日益"豐滿...

關(guān)鍵字: AI 代碼 LAB 模型

美國(guó)舊金山和中國(guó)蘇州2026年2月8日 /美通社/ -- 信達(dá)生物制藥集團(tuán)(香港聯(lián)交所股票代碼:01801),一家致力于研發(fā)、生產(chǎn)和銷(xiāo)售腫瘤、自身免疫、代謝、眼科等重大疾病領(lǐng)域創(chuàng)新藥物的生物制藥公司,宣布與禮來(lái)制藥達(dá)成戰(zhàn)...

關(guān)鍵字: COM 代碼 創(chuàng)始人 控制

香港2026年2月4日 /美通社/ -- 華欽科技集團(tuán)(納斯達(dá)克代碼:CLPS,以下簡(jiǎn)稱(chēng)"華欽科技"或"集團(tuán)")今日宣布其董事會(huì)已通過(guò)一項(xiàng)集團(tuán)股份回購(gòu)計(jì)劃的決議。該決議聲明,當(dāng)集團(tuán)股價(jià)低于每股2美元時(shí),集團(tuán)可在公開(kāi)市場(chǎng)上...

關(guān)鍵字: PS BSP 代碼 納斯達(dá)克

香港2025年12月11日 /美通社/ -- 諾亞控股有限公司(Noah Holdings Limited,以下簡(jiǎn)稱(chēng)"諾亞"或"公司",紐交所代碼:NOAH,港交所代碼:6686)...

關(guān)鍵字: AI 代碼 AN 操作系統(tǒng)

弗吉尼亞州阿什本2025年12月10日 /美通社/ -- 企業(yè)技術(shù)與創(chuàng)新領(lǐng)域的領(lǐng)先合作伙伴DXC Technology(紐約證券交易所代碼:DXC)今日宣布推出AdvisoryX,這是一支旨在幫助企業(yè)應(yīng)對(duì)最復(fù)雜的戰(zhàn)略、運(yùn)...

關(guān)鍵字: ADVISOR AI TECHNOLOGY 代碼

新加坡2025年12月8日 /美通社/ -- 近日,51Talk在線教育集團(tuán)("51Talk"或"公司")(紐約證券交易所美國(guó)股票代碼:COE)公布了其截至2025年9月...

關(guān)鍵字: BSP 代碼 創(chuàng)始人 新加坡

北京2025年12月2日 /美通社/ -- 亞馬遜云科技在2025 re:Invent全球大會(huì)上,宣布為Amazon Transform推出全新的Agent功能,以快速推進(jìn)代碼和應(yīng)用現(xiàn)代化,助力客戶更快消除技術(shù)債務(wù),將更...

關(guān)鍵字: 亞馬遜 代碼 TRANSFORM AGENT

蘇州2025年11月10日 /美通社/ -- 在11月8日舉行的天準(zhǔn)科技股份有限公司(股票代碼:688003)成立二十周年峰會(huì)上,一項(xiàng)承載深遠(yuǎn)意義的公益計(jì)劃——"美道基金"正式發(fā)布。香港科技大學(xué)校董會(huì)...

關(guān)鍵字: AI 人工智能 代碼 智能化

模塊化是一種將復(fù)雜系統(tǒng)分解為獨(dú)立、可管理單元的軟件開(kāi)發(fā)方法。在前端開(kāi)發(fā)中,模塊化指的是將JavaScript代碼、樣式、模板等資源組織成獨(dú)立的功能單元。

關(guān)鍵字: 模塊化 代碼

香港2025年10月10日 /美通社/ -- 華欽科技集團(tuán)公司(納斯達(dá)克代碼:CLPS,以下簡(jiǎn)稱(chēng)"華欽科技")今日宣布將于下周五2025年10月17日開(kāi)盤(pán)前發(fā)布2025財(cái)年下半年及全年財(cái)報(bào)。 華欽科技集團(tuán)公司簡(jiǎn)介 華...

關(guān)鍵字: PS BSP 代碼 COM
關(guān)閉