1. 程式人生 > >javap -c 基本用法,簡單位元組檔案解釋,分析try 中return、finally執行順序問題

javap -c 基本用法,簡單位元組檔案解釋,分析try 中return、finally執行順序問題

1、初始javap,通過javap命令檢視程式計數器、區域性變量表,運算元棧變化。

public class TestZhaZhaJavap {

	
	public int test() {
		int a=100;
		
		int b=200;
		
		int c=300;
		
		
		return (a+b)*c;
	}

}

a、圖A標明當指令偏移到12時候當前區域性變數和運算元棧變化情況

javap-1

b、圖B,標明執行完iadd指令後當前存在的運算元棧頂資訊。

java

c、同樣當執行到偏移地址為15的指令時:將運算元棧頂資料做乘法後重新放入棧頂,遇到ireturn 返回棧頂資料。

2、javap -c 檢視class 檔案位元組碼資訊,解決 finally是在try方法塊return後執行還是return之前執行

public class TestZhaZhaHaoException {

	public static void main(String[] args) {
		
		int t=t();
		System.out.println(t);
		
	}
	
	
	public static int t(){
		
		
               int i=1;
		
		try {
			
			return i;
			
		} finally {
			++i;
		}
		
		
	}
}

使用javap -c 檢視TestZhaZhaHaoException 位元組檔案,輸出結果如一下截圖:

同時由位元組碼可見finally是在return執行返回之前執行。

3、class 檔案部分指令解析

與方法相關的JVM指令:

指令 運算元 解釋
invokeinterface class/method desc 呼叫介面方法
invokespecial class/method desc 呼叫超類構造方法、例項初始化方法或私有方法

invokestatic

class/method desc 呼叫靜態方法
invokevirtual class/method desc 呼叫例項方法

dup:將當前棧頂元素複製一份,並壓入戰中。

pop:從當前棧頂出棧一個元素。

pop2:從棧頂的一個long或double型別的或兩個其他資料從棧頂彈出

swap:將棧頂兩個非long或者double型別的數值交換

指令 運算元 解釋
aload n 將當前本地變數n放入棧頂中,變數n是一個引用,如aload_1,aload_2,aload_3
astore n 將棧頂元素存入本地變數n中,變數n是一個引用
dload n 將當前本地變數n放入棧頂中,變數n是一個double型別
dstore n 將棧頂元素存入本地變數n中,變臉n是一個double型別
fload n 將當前本地變數n放入棧頂中,變數n是一個fload型別
fstore n 將棧頂元素存入本地變數n中,變數n是一個float型別
iinc n increment 將指定int型變數增加指定值
iload n 將當前本地變數n放入棧頂中,變數n是一個int型別
lload n 將當前本地變數n放入棧頂中,變數n是一個long型別
istore n

將棧頂元素存入本地變數n中,變數n是一個long型別

相關推薦

javap -c 基本用法簡單位元組檔案解釋分析try returnfinally執行順序問題

1、初始javap,通過javap命令檢視程式計數器、區域性變量表,運算元棧變化。 public class TestZhaZhaJavap { public int test() { int a=100; int b=200; int c=

C++】如何進行簡單檔案輸入輸出?(基本操作及程式碼示例)(程式設計習慣)

使用cin進行輸入時,程式將輸入 視為一系列的位元組,每個位元組都被解釋為字元編碼,輸入一開始都是字元資料。 輸出檔案開啟 //第一種 ofstream outFile; outFile.open("my.txt"); //第二種 ofstream fout; char filename[5

C#如何操控FTP獲取FTP檔案或資料夾列表獲取FTP檔案大小FTP上傳FTP刪除檔案FTP新建資料夾刪除資料夾

C#如何操控FTP 出處:http://www.cnblogs.com/rond/archive/2012/07/30/2611295.html,http://www.cnblogs.com/rond   關於FTP的應用免不了要對FTP進行增刪查改什麼的。通過搜尋,整理和修改

C語言寫一個簡單的三子棋實現玩家與電腦的對戰

原始碼: #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <windows.h> #include <time.h> /* 用 C 寫一個三子棋 */ //邏輯: //1. 畫

java最簡單複製檔案方法不依賴任何框架

java最簡單複製檔案方法   把java2.txt內容複製到java.txt中   import java.io.File; import java.io.IOException; import java.nio.file.Files; im

javap基本用法

javap是JDK自帶的反彙編器,可以檢視java編譯器為我們生成的位元組碼。通過它,我們可以對照原始碼和位元組碼,從而瞭解很多編譯器內部的工作。語法:javap [ 命令選項 ] class. . .javap 命令用於解析類檔案。其輸出取決於所用的選項。若沒有使用選項,

檔案操作檔案操作時的許可權設定快速實現檔案拷貝C語言常用IO函式

定義一個檔案型別指標。用於儲存開啟檔案後的指標。 C語言中可以用 gets(char *str) 來輸入一行(包括空格)。 FILE *p = fopen("檔名",“開啟的許可權”); 其中許可權可以是w ,此時如果檔案不存在會自動建立,如果存在就會自動覆蓋(內容); 許

8.3 路徑檔名路徑名稱空間名稱空間最大檔案長度檔名路徑名

https://docs.microsoft.com/zh-cn/windows/desktop/FileIO/naming-a-file 命名檔案、路徑和名稱空間 Windows 支援的所有的檔案系統都使用檔案和目錄的方式來訪問磁碟或者裝置上的內容。開發人員應該瞭解,windows API

electron-vue應用build後開啟exe檔案安裝成功後開啟應用報錯

 問題描述:      2.解決方法: import {app, BrowserWindow, Menu, ipcMain, Tray,nativeImage} from 'electron' const path =

將100道計算題輸出至txt檔案再讀取檔案至控制檯,在控制檯輸入答案並評判對錯

我在課堂上基本完成了輸出100道題和建立文件,但是因為對輸入輸出流不熟悉,所以並沒有實現將輸出的計算題匯出到文件裡,在課下我又請教了宿舍的大佬,基本完成如下: 原始碼: import java.io.File; import java.io.FileInputStream; import java.

Samba 伺服器實現liunx檔案共享window檢視

Samba 伺服器,實現liunx檔案共享,window檢視 剛剛使用Liunx時,對於Liunx下的檔案會感覺不太方便,如果想在window下直接訪問Liunx檔案,直接編輯,會很大的方便。 現在簡述一些 Samba伺服器,Liunx安裝,window訪問, 使用平臺 :u

java檔案操作 (1)——判別指定檔案是否存在讀取檔案修改時間和大小讀取文字檔案內容向文字檔案寫入指定內容

任務要求: 完成一個java application應用程式,判別指定路徑下指定檔名的檔案是否存在。 如果指定檔案存在,讀取並分別顯示其修改時間和檔案大小等屬性。 以文字方式開啟某一指定路徑指定檔名的文字檔案,讀取其內容並顯示。 以文字方式向某

最小二乘法的最簡單的幾何解釋非常直觀!

最小二乘法就是解一個無解的線性方程組 要找到解,就要找到a1,a2的一個線性組合,使得組合後的向量剛好等於b。可惜的是任何的a1和a2線性組合,只可能出現在a1,a2所在的平面S上(這個平面S就是傳說中的向量空間),但是向量b不在平面S上,如下圖。不可能找到解,怎麼辦呢? 無解

壓縮包解密zip解壓檔案解密找回密碼RAR破解密碼工具壓縮包解密解壓檔案解密檔案軟體RA

壓縮包解密,zip解壓檔案解密,找回密碼,RAR破解密碼工具,壓縮包解密,解壓檔案解密,檔案軟體RAR破解密碼工具免費下載。 目前我見過的最好用的,破解密碼速度最快的軟體,沒有之一,附帶教程,親測好用!!! 下載地址:https://pan.baidu.com/s/1QUwcvwGtwL4StNfSO

lseek函式 操作檔案指標實現計算檔案長度構建空洞檔案

lseek(fd,   偏移量,   參照物即從哪裡開始移動); off_t lseek(int fd, off_t offset, int whence); 計算檔案長度程式碼: #include <sys/types.h> #include <uni

【Flume】flume檔案監控的source元件開發增量傳輸檔案內容支援斷點續傳功能

基於flume-ng中原有exec的source型別,通過tail依賴於作業系統去監聽檔案內容變化,其次,不支援斷點續傳的功能,特此,自行開發了一個元件,大家可以看看,一起探討: 該元件特點如下: 1、一個source對應一個檔案監控 2、實時監控檔案變化 3、增量傳輸檔

koa2獲取圖片並返回設定靜態檔案目錄訪問本地檔案

// uri: 'http://images5.fanpop.com/image/photos/30900000/beautiful-pic-different-beautiful-pictures-30958249-1600-1200.jpg'

Vivado開發環境將COE檔案加入IP核ROM

在DDS開發過程中,我們需要想事先做好的COE檔案加入到ROM中,具體步驟如下:1. 在Vivado中開啟ROM IP核,在這裡我們選擇Single ROM;2. 在port A option選項卡中,做以下設定:3. 在Othe Option選項卡中:4. 點選ok即可!

獲取資料夾下所有圖片名字用 glob模組簡單操作就可以不用os的操作 python的一個好用的檔名操作模組glob

轉 python中的一個好用的檔名操作模組glob 2017年09月19日 16:48:13 何雷 閱讀數:1963

一個簡單PDF檔案的結構分析

一個簡單的PDF檔案結構的分析 Adobe的PDF參考告訴我們一個PDF檔案可以通過下面4個方面來理解: 1.         物件, 一個PDF文件是由一組基本資料型別組成的資料結構。 2.         檔案(物理結構), 決定物件是如何存放在一個PDF檔案中的