日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java虚拟机new和newarray相关指令学习

發布時間:2025/4/14 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java虚拟机new和newarray相关指令学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先做一個簡單程序;

import java.io.*;class Employee{String name;int age;String designation;double salary;public Employee(String name){this.name = name;}public void empAge(int empAge){age = empAge;}public void empDesignation(String empDesig){designation = empDesig;}public void empSalary(double empSalary){salary = empSalary;}public void printEmployee(){System.out.println("名字:"+ name );System.out.println("年齡:" + age );System.out.println("職位:" + designation );System.out.println("薪水:" + salary);} }public class EmployeeTest{public static void main(String[] args){Employee empOne = new Employee("RUNOOB1");Employee empTwo = new Employee("RUNOOB2");empOne.empAge(26);empOne.empDesignation("高級工程師");empOne.empSalary(1000);empOne.printEmployee();empTwo.empAge(21);empTwo.empDesignation("中級工程師");empTwo.empSalary(500);empTwo.printEmployee();} }

構建;同一個文件中有多個java類,只能有一個是public,其他類要把public去掉;

然后反匯編;如下;?

看一下反匯編后的指令;

main里面,第0和第10行,是new指令;

new指令的用途是創建類實例;

然后還包含多條invokevirtual指令;invokevirtual 指令用于調用對象的實例方法;


java虛擬機中有一類指令是 方法調用和返回指令;其說明如下;

invokevirtual 指令用于調用對象的實例方法,根據對象的實際類型進行分派(虛方法分派),這也是Java語言中最常見的方法分派方式。
invokeinterface 指令用于調用接口方法,它會在運行時搜索一個實現了這個接口方法的對象,找出適合的方法進行調用。
invokespecial 指令用于調用一些需要特殊處理的實例方法,包括實例初始化(<init>)方法、私有方法和父類方法。
invokestatic ?調用靜態方法(static方法)。
invokedynamic 指令用于在運行時動態解析出調用點限定符所引用的方法,并執行該方法,前面4條調用指令的分派邏輯都固化在Java虛擬機內部,而invokedynamic指令的分派邏輯是由用戶所設定的引導方法決定的。

?

再做一個程序;

public class TestArray {public static void main(String[] args) {int size = 10;double[] myList = new double[size];myList[0] = 5.6;myList[1] = 4.5;myList[2] = 3.3;myList[3] = 13.2;myList[4] = 4.0;myList[5] = 34.33;myList[6] = 34.0;myList[7] = 45.45;myList[8] = 99.993;myList[9] = 11123;double total = 0;for (int i = 0; i < size; i++) {total += myList[i];}System.out.println("總和為: " + total);} }

構建,并反匯編;如下;

?

看一下指令里面包含?newarray;

newarray是創建數組的指令;

然后還有?dastore 指令;dastore是?將一個操作數棧的值存儲到數組元素中的指令;

86行,daload,這是把一個數組元素加載到操作數棧;

相關這一類的Java虛擬機指令,其說明如下;

創建數組的指令:newarray、anewarray、multianewarray。
訪問類字段(static字段,或者稱為類變量)和實例字段(非static字段,或者稱為實例變量)的指令:getfield、putfield、getstatic、putstatic。
把一個數組元素加載到操作數棧的指令:baload、caload、saload、iaload、laload、faload、daload、aaload。
將一個操作數棧的值存儲到數組元素中的指令:bastore、castore、sastore、iastore、fastore、dastore、aastore。
取數組長度的指令:arraylength。
檢查類實例類型的指令:instanceof、checkcast。

?

虛擬機指令應該算是類匯編的指令;但是和x86匯編有很大的不同;其包含的new和newarray這一類型指令在x86匯編中沒有對應類別;

總結

以上是生活随笔為你收集整理的Java虚拟机new和newarray相关指令学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。