`

深入java虚拟机 方法调用指令

阅读更多

1 方法调用指令

  

 

 

2 实例方法,类方法

   调用实例方法时, 虚拟机从所调用方法栈内的操作数栈中弹出objectref和args, 虚拟机把objectref作为局部变量0放到新的栈中, 把所有args作为变量1,2,。。。等处理,objectref是隐式传给所有实例方法的this指针   调用类方法时, 虚拟机只从所调用方法栈桢中的操作数栈中弹出参数,并将它们放到新的栈桢中作为局部变量0, 1,2。。。

   例1 实例方法调用:

  

    public int test (int x, int y) {
        System.out.println(this);
        return x + y;
    }

    字节码:

  

getstatic java/lang/System/out Ljava/io/PrintStream;
aload_0  //获取位置为0的对象引用(this)压入栈(调用当前方法时,虚拟机会把this隐式的压入当前方法栈的位置为0的变量上)
invokevirtual java/io/PrintStream/println(Ljava/lang/Object;)V //调用println方法
iload_1 //获取位置为1的局部变量,压入栈(调用当前方法时,虚拟机会把第一个参数压入当前方法栈的位置为1的变量上)
iload_2 //获取位置为2的局部变量,压入栈(调用当前方法时,虚拟机会把第二个参数压入当前方法栈的位置为2的变量上)
iadd  //栈顶两个int类型的变量相加,结果压入栈
ireturn //返回栈顶的int值

 

   例2 类方法调用

  

    public static int testStatic (int x, int y) {
        return x + y;
    }

   字节码:

  

iload_0 //获取位置为0的int值压入栈(调用当前方法时,虚拟机会把第一个参数压入当前方法栈的位置为0的变量上)
iload_1 //获取位置为1的int值压入栈(调用当前方法时,虚拟机会把第二个参数压入当前方法栈的位置为1的变量上)
iadd  //栈顶的两个int值相加,结果压入栈顶
ireturn //返回栈顶int值

   

3 实例方法特殊调用

   invokespecial, inovkeinterface

   invokespecial:根据引用类型来调用实例方法, 而不是根据对象的类来调用的时候,通常使用invokespecial指令,分一下三种情况:

      (1)实例初始化方法(init())方法

      (2)私有方法

      (3)使用super关键字调用的方法

   inovkeinterface

       当引用的类型为类的时候, 使用invokevirtual;当引用的类型为接口时,使用invokeinterface

 

4 方法返回

  方法的返回以类型+return指令来实现,退出当前方法栈,从栈顶弹出返回值,压入调用方法的栈

 

 

  • 大小: 67.2 KB
  • 大小: 69.9 KB
  • 大小: 230.7 KB
分享到:
评论

相关推荐

    深入java虚拟机.pdf

    深入 Java 虚拟机.pdf Java 虚拟机(Java Virtual Machine,JVM)是 Java 语言的 runtime 环境,是 Java 程序执行的核心组件。它提供了一个平台无关的环境,允许 Java 程序在不同的操作系统和硬件平台上运行。 一...

    深入Java虚拟机——本地方法栈.pdf

    总的来说,本地方法栈和执行引擎是Java虚拟机实现复杂功能的关键组件。本地方法栈使Java能够调用本地库,执行系统级别的操作,而执行引擎则确保字节码的有效执行,优化程序性能。两者共同协作,为Java程序提供了一个...

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

    《深入Java虚拟机(原书第2版)》,原书名《Inside the Java Virtual Machine,Second Edition》,作者:【美】Bill Venners,翻译:曹晓钢、蒋靖,出版社:机械工业出版社,ISBN:7111128052,出版日期:2003 年 9 ...

    深入JAVA虚拟机第二版 Bill Venners著 曹晓钢 蒋靖译

    《深入JAVA虚拟机第二版》是由Bill Venners撰写,并由曹晓钢和蒋靖翻译的中文书籍。这本书是Java开发者必备的经典读物,它详细地解析了Java虚拟机(JVM)的工作原理,帮助读者深入理解Java程序的运行机制。尽管描述...

    深入java虚拟机 高清pdf 高清高清高清

    《深入Java虚拟机》这本书是Java开发者深入了解JVM(Java Virtual Machine)的必备经典之作。它详尽地探讨了Java虚拟机的工作原理、内存管理、类加载机制、字节码执行以及性能优化等多个核心主题,旨在帮助开发者...

    深入JAVA虚拟机 不那么完美的第二版.pdf.zip

    堆存储对象实例,栈处理方法调用,方法区存储类信息,本地方法栈服务于JNI,程序计数器记录当前线程执行的指令地址。 3. **垃圾收集**:JVM的自动内存管理机制,主要负责回收无用对象占用的内存空间。常见的垃圾...

    深入Java虚拟机(原书第二版清晰版).

    《深入Java虚拟机(原书第二版清晰版)》这本书是为那些已经学习了Java编程语言,希望通过深入理解Java虚拟机(JVM)来进一步提升自己技术能力的Java程序员所准备的。本书详细介绍了JVM的内部工作机制,包括但不限于...

    Java虚拟机规范.Java SE 8版.zip

    第3章详述如何将Java语言编写的程序转换为Java虚拟机指令集,涉及常量、局 部变量、控制结构、算术运算、参数接收、方法调用、数组、操作数栈、异常处理、同步与注解等;第4章深入分析用来表示编译后的类和接口的...

    深入java虚拟机最新版

    ### 深入Java虚拟机最新版:执行引擎与类加载机制详解 #### 执行引擎:一次探索之旅 Java虚拟机(JVM)的核心组件之一就是执行引擎,它负责将字节码转换为机器指令执行。在《深入Java虚拟机最新版》这本书中,我们...

    深入java虚拟机

    《深入Java虚拟机》 Java虚拟机(JVM)是Java程序的核心运行环境,它将Java源代码编译成字节码,然后解释执行这些字节码,使得Java程序可以在不同的操作系统上无缝运行,实现了“一次编写,到处运行”的目标。 1. ...

    深入Java虚拟机

    深入理解Java虚拟机对于优化代码性能、排查问题以及提升编程能力至关重要。本篇文章将详细探讨Java虚拟机的类装载机制、原理以及其实现与应用。 首先,我们要了解Java虚拟机的架构。JVM主要由以下几个部分组成:类...

    深入java虚拟机笔记

    ### 深入Java虚拟机知识点总结 #### 第一章 Java体系结构介绍 - **Java体系结构概述**:本章主要介绍了Java体系结构的基本概念及其组成部分。Java体系结构旨在为开发者提供一个统一、高效且跨平台的应用开发环境。...

    Java虚拟机规范 Java SE 8版-带目录-pdf

    Java虚拟机规范 Java SE 8版-带目录-pdf,本书完整而准确地阐释了Java虚拟机各方面的细节,围绕Java虚拟机整体架构、编译器、class文件格式、加载、链接与初始化、指令集等核心主题对Java虚拟机进行全面而深入的分析...

    深入Java虚拟机(原书第二版)Bill Venners 著

    《深入Java虚拟机》是Java开发者必读的经典之作,由Bill Venners撰写。这本书以其深入浅出的方式,详尽地解析了Java虚拟机(JVM)的工作原理和内部机制,帮助开发者提升对Java程序运行时环境的理解,从而能够编写出...

    深入JAVA虚拟机第二版.7z

    《深入JAVA虚拟机第二版》是一本专注于Java虚拟机(JVM)的权威指南,针对JVM的深入了解和优化提供了详尽的解析。这本书对于Java开发者、系统管理员以及对Java性能调优感兴趣的读者来说,是不可或缺的参考资料。下面...

    免费 深入Java虚拟机(原书第二版清晰版.pdf

    《深入Java虚拟机》这本书是Java开发者不可或缺的参考资料,它详细阐述了Java虚拟机(JVM)的工作原理和内部机制,对于理解Java程序的运行方式以及优化代码具有极高的价值。此版本为原书的第二版,清晰度高,便于...

    深入java虚拟机 随书源码

    堆是所有对象的存储区域,栈存储方法调用时的局部变量,方法区存储类的信息,本地方法栈用于支持native方法,程序计数器记录下一条将要执行的指令地址。 3. **类加载机制**:Java中的类不是一开始就全部加载的,...

    Java虚拟机规范中文版(JavaSE7).pdf

    Java虚拟机指令集是虚拟机执行的基本操作单元,每条指令对应一个特定的操作,如加载和存储变量、算术运算、控制流程、对象创建和方法调用等。这些指令是无操作数的,它们的参数通常在操作数栈上找到。Java SE 7版的...

Global site tag (gtag.js) - Google Analytics