`

JVM学习笔记-调用Java方法(Invoking a Java Method)

 
阅读更多

Invoking a Java Method

 

As mentioned in Chapter 5, "The Java Virtual Machine," the virtual machine creates a new stack frame for each Java (not native) method it invokes. The stack frame contains space for the method's local variables, its operand stack, and any other information required by a particular virtual machine implementation. The size of the local variables and operand stack are calculated at compile-time and placed into the class file, so the virtual machine knows just how much memory will be needed by the method's stack frame. When it invokes a method, it creates a stack frame of the proper size for that method. The virtual machine pushes the new stack frame onto the Java stack.

 

如第5章所述,虚拟机为每一个调用的Java(非本地)方法建立一个新的栈帧。栈帧包括:为方法的局部变量所预留的空间,该方法的操作数栈,以及特定虚拟机实现需要的其他所有的信息.局部变量和操作数栈大小在编译时计算出来,并设置到class文件中去,然后虚拟机就能够了解到方法的栈帧需要多少内存.当虚拟机调用一个方法的时候,它为该方法创建恰当大小的栈帆,再将新的栈帧压入Java栈。


For an instance method, the virtual machine pops the objectref and args from the operand stack of the calling method's stack frame. It places the objectref on the new stack frame as local variable 0, and all the args as local variable 1, 2, and so on. The objectref is the implicit this pointer that is passed to any instance method.

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

 

For a class method, the virtual machine just pops the args from the operand stack of the calling method's frame and places them onto the new stack frame as local variable 0, 1, 2, and so on.

对于类方法,虚拟机只从所调用方法栈帧中的操作数栈中弹出参数,并将它们放到新的栈帧中去作为局部变量0,1,2..........

 

Once the objectref and args (or just the args, for a class method) have been placed into the local variables of the new frame, the virtual machine makes the new stack frame current and sets the program counter to point to the first instruction in the new method.

当objectref和args(对于类方法则只有args)被赋给新栈帧中的局部变量之后,虚拟机把新的栈帧作为当前栈帧,然后将程序计数器指向新方法的第一条指令。

 

  • 大小: 31.2 KB
分享到:
评论

相关推荐

    使用C++创建java虚拟机JVM,使用JNI调用java函数.zip

    3. **获取JNIEnv指针**:成功初始化JVM后,我们获得一个`JNIEnv*`指针,它是C++与Java之间进行方法调用的关键。`JNIEnv`提供了很多函数,如`FindClass`, `GetMethodID`, `CallVoidMethod`等,用于操作Java对象和调用...

    深入JVM---JVM命令---invokespecial

    《深入JVM---JVM命令---invokespecial》 在Java虚拟机(JVM)的世界里,`invokespecial`指令扮演着至关重要的角色。它主要用于执行对象的构造方法(即`<init>`方法),以及调用私有方法和父类非静态方法。本文将...

    JVM学习笔记(一)

    ### JVM学习笔记(一) #### 一、JVM概述与工具使用 JVM(Java Virtual Machine)是Java语言的核心组成部分之一,它为Java程序提供了一个跨平台的运行环境。本篇学习笔记主要介绍如何利用一系列工具来查看和监控JVM...

    JVM-java-springboot-demo.zip

    JVM-java-springboot-demo.zip

    JVM学习笔记2018-4-151

    在Java中,JVM也需要管理虚拟内存,包括堆内存(用于对象和数组)、栈内存(用于方法调用)以及方法区(存储类信息)。堆内存是JVM内存管理的主要部分,它在所有线程之间共享,而栈内存则为每个线程单独分配。虚拟机...

    Java JDK7学习笔记-光盘

    《Java JDK7学习笔记》是作者多年来教学实践经验的总结,汇集了教学过程中学生在学习java时遇到的概念、操作、应用或认证考试等问题及解决方案。《Java JDK7学习笔记》针对java se 7新功能全面改版,无论是章节架构...

    Java分布式应用学习笔记-谈JVM.doc

    【Java分布式应用学习笔记-谈JVM】 在Java分布式应用中,JVM(Java虚拟机)扮演着至关重要的角色。虽然有些人可能认为分布式系统与JVM的关系并不密切,但事实上,尤其是在大型分布式环境,如云计算服务平台,对Java...

    Java虚拟机(JVM)规范-Java7-中文文字版-非扫描版-带目录-带书签

    在Java虚拟机规范中,介绍了Java虚拟机的架构、类加载机制、字节码文件格式、方法调用机制、异常处理机制、 Sicherheit机制等方面的内容。 Java虚拟机规范的重要性在于,它定义了Java语言的编译、解释和执行过程,...

    JVM 学习笔记(Java虚拟机)

    **JVM学习笔记(Java虚拟机)** Java虚拟机(JVM)是Java语言的核心组成部分,它是Java程序运行的平台,负责解释和执行字节码。深入理解JVM对于优化Java应用程序性能至关重要。本笔记将从以下几个方面详细介绍JVM:...

    nginx-upstream-jvm-route-0.1.tar.gz

    "nginx-upstream-jvm-route-0.1.tar.gz"正是为了解决这个问题而设计的一个解决方案。 首先,让我们了解一下Nginx的Upstream模块。Upstream模块允许Nginx将接收到的请求转发到一组后端服务器,可以根据配置的策略...

    java之jvm学习笔记十一(访问控制器)-源码

    本文将深入探讨JVM中的访问控制器,主要基于“java之jvm学习笔记十一(访问控制器)-源码”这一主题,以及相关的源码分析。 首先,我们得了解Java的安全模型。Java安全模型基于一种称为安全管理器(SecurityManager)...

    java之jvm学习笔记五(实践写自己的类装载器)

    这个“java之jvm学习笔记五(实践写自己的类装载器)”很可能是对这一主题的详细探讨。 类装载器在Java中的主要职责是动态加载类到JVM中。Java的类装载器分为三个基本层次:启动类装载器(Bootstrap ClassLoader)、...

    java jvm 参数 -Xms -Xmx -Xmn -Xss -

    线程栈存储方法调用时的局部变量、方法返回地址等。如果线程需要处理大量递归或者大型对象,可能需要增加`-Xss`的值,以避免`StackOverflowError`。例如,`-Xss256k`表示每个线程的栈内存为256KB。 JVM内存调优是一...

    python调用java代码方法

    一旦JVM启动,就可以创建Java对象并调用其方法。假设我们有一个Java类`com.example.MyClass`,它有一个静态方法`sayHello()`,可以在Python中这样调用: ```python from java.lang import Class from ...

    实战-C++调用Java函数

    JNI是Java提供的一种机制,使得本地(Native)代码(如C++)能够与Java虚拟机(JVM)通信,调用Java类和方法。 在压缩包中的文件列表中,我们看到: 1. `FunCall_C2Java_Callee.jar` - 这是一个Java编译后的可执行...

    JVM学习笔记.docx

    本篇JVM学习笔记主要涵盖了以下几个核心知识点: 1. **运行时数据区**: - **程序计数器**:记录当前线程执行的字节码的行号,用于线程恢复执行时跳转到正确位置。 - **Java虚拟机栈**:每个方法执行时创建的栈帧...

    易语言JAVA调用 例子

    3. **调用Java方法**:使用`CallStaticVoidMethod`或`CallVoidMethod`等函数,根据方法是否为静态,以及传入的参数类型,调用Java方法。 4. **处理结果**:根据Java方法的返回值,易语言程序可以进行相应的操作。 ...

    java JVM 类加载-初始化 过程

    java JVM 类加载-初始化 过程

    Java基础尚硅谷宋红康学习笔记

    1. **反射**:Java反射机制允许在运行时检查类的信息(如类名、方法、字段等),并能动态调用方法和修改字段值,增强了代码的灵活性。 2. **泛型**:泛型提供了一种在编译时检查类型安全的方法,允许在类、接口和...

    java学习笔记 - 1

    1.java开发环境--java编译运行过程(常见面试题) 2.名词解释--JVM;JRE,JDK 3.配置环境变量 4.eclipse: 开发环境 开发步骤 注释

Global site tag (gtag.js) - Google Analytics