詳解java中jvm虛擬機(jī)棧的作用
jvm虛擬機(jī)棧的作用
jvm虛擬機(jī)棧棧幀的組成
jvm虛擬機(jī)棧,也叫java棧,它由一個(gè)個(gè)的棧幀組成,而棧帖由以下幾個(gè)部分組成
- 局部變量表-存儲(chǔ)方法參數(shù),內(nèi)部使用的變量
- 操作數(shù)棧-在變量進(jìn)行存儲(chǔ)時(shí),需要進(jìn)行入棧和出棧
- 動(dòng)態(tài)連接-引用類(lèi)型的指針
- 方法出口-方法的返回
- 一段原程序代碼
package com.lind.basic; public class Demo1 { static int hello() { int a = 1; int b = 2; int c = a + b; return c; } public static void main(String[] args) { System.out.println(hello()); } }
一 生成字節(jié)碼文件
javac demo1.java
生成之后,擴(kuò)展名是.class,這個(gè)文件對(duì)于我們來(lái)說(shuō)是沒(méi)有可讀性的。
二 對(duì)class文件反匯編
javap demo1.class > demo1.txt
我們可以通過(guò)文件編譯工具來(lái)查看demo1.txt的內(nèi)容
Compiled from "Demo1.java" public class com.lind.basic.Demo1 { public com.lind.basic.Demo1(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: return static int hello(); Code: 0: iconst_1 // 把第一個(gè)整型變量推到操作數(shù)棧 1: istore_0 // 讓它出棧,并存儲(chǔ)到局部變量表 2: iconst_2 3: istore_1 4: iload_0 // 加載第一個(gè)數(shù)據(jù)入操作數(shù)棧 5: iload_1 // 加載第二個(gè)數(shù)據(jù)入操作數(shù)棧 6: iadd // 將兩個(gè)數(shù)相加,結(jié)束入操作數(shù)棧 7: istore_2 // 將結(jié)果出棧,存到局部變量表 8: iload_2 // 加載它入操作數(shù)棧 9: ireturn // 返回 public static void main(java.lang.String[]); Code: 0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 3: invokestatic #3 // Method hello:()I 6: invokevirtual #4 // Method java/io/PrintStream.println:(I)V 9: return }
對(duì)于上面的匯編文件,我們是可以看的懂的,而且我們需要,匯編語(yǔ)言可以直接在計(jì)算機(jī)上運(yùn)行,我想jvm應(yīng)該也是把class文件生成對(duì)應(yīng)操作系統(tǒng)的匯編文件,然后交給操作系統(tǒng)去執(zhí)行吧!
總結(jié)
以上所述是小編給大家介紹的java中jvm虛擬機(jī)棧的作用,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
MyBatis?超詳細(xì)講解動(dòng)態(tài)SQL的實(shí)現(xiàn)
動(dòng)態(tài)?SQL?是?MyBatis?的強(qiáng)大特性之一。如果你使用過(guò)?JDBC?或其它類(lèi)似的框架,你應(yīng)該能理解根據(jù)不同條件拼接?SQL?語(yǔ)句有多痛苦,例如拼接時(shí)要確保不能忘記添加必要的空格,還要注意去掉列表最后一個(gè)列名的逗號(hào)。利用動(dòng)態(tài)?SQL,可以徹底擺脫這種痛苦2022-03-03Java JTable 實(shí)現(xiàn)日歷的示例
這篇文章主要介紹了Java JTable 實(shí)現(xiàn)日歷的示例,幫助大家更好的理解和學(xué)習(xí)Java jtable的使用方法,感興趣的朋友可以了解下2020-10-10spring 整合mybatis后用不上session緩存的原因分析
因?yàn)橐恢庇胹pring整合了mybatis,所以很少用到mybatis的session緩存。什么原因呢?下面小編給大家介紹spring 整合mybatis后用不上session緩存的原因分析,需要的朋友可以參考下2017-02-02springBoot使用openfeign來(lái)遠(yuǎn)程調(diào)用的實(shí)現(xiàn)
這篇文章主要介紹了springBoot使用openfeign來(lái)遠(yuǎn)程調(diào)用的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03hadoop 詳解如何實(shí)現(xiàn)數(shù)據(jù)排序
在很多業(yè)務(wù)場(chǎng)景下,需要對(duì)原始的數(shù)據(jù)讀取分析后,將輸出的結(jié)果按照指定的業(yè)務(wù)字段進(jìn)行排序輸出,方便上層應(yīng)用對(duì)結(jié)果數(shù)據(jù)進(jìn)行展示或使用,減少二次排序的成本2022-02-02Spring aop 如何通過(guò)獲取代理對(duì)象實(shí)現(xiàn)事務(wù)切換
這篇文章主要介紹了Spring aop 如何通過(guò)獲取代理對(duì)象實(shí)現(xiàn)事務(wù)切換的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07Spring Cloud Alibaba 本地調(diào)試介紹及方案設(shè)計(jì)
為了解決 本地調(diào)試 的問(wèn)題,本文實(shí)現(xiàn)了一種簡(jiǎn)單實(shí)用的策略,可以通過(guò) Nacos 動(dòng)態(tài)配置服務(wù)路由,還可以基于用戶(hù),部門(mén),組織等級(jí)別配置服務(wù)路由,實(shí)現(xiàn) 本地調(diào)試 的同時(shí),實(shí)際上也實(shí)現(xiàn) 灰度發(fā)布,感興趣的朋友跟隨小編一起看看吧2021-07-07