`
grzrt
  • 浏览: 188077 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JVM学习之:虚拟机中的运行时栈帧总结(二)

    博客分类:
  • JAVA
 
阅读更多

JVM学习之:虚拟机中的运行时栈帧总结(一)   虚拟机栈的情况做了一个简单的介绍,也对虚拟机栈中的局部变量表做了简单的介绍,本篇文章主要是简单的总结一下在虚拟机栈帧的其他组成部分.虚拟机栈帧除了局部变量表,还包括操作数栈,动态连接 ,以及方法的返回地址等结构

(一)操作数栈:

首先根据名称可以看出操作数栈是一个基本的栈来实现数据结构,那么它自然也遵守栈的后 入先出的原则.其次,它里面主要存放的是一些算数运算用到的参数也可能是中间结果,也可能是在调用其他方法时需要用到的参数,通过这点可以看出,方法刚刚 开始执行的时候,这个里面是空的.最后 要说明的是操作数栈中可以存放任意的java数据类型,包括long和double,且32位的数据类型占一个栈空间,64位的数据类型占2个栈空间.

 

(二)动态连接:

在说明什么是动态连接之前先看看方法的大概调用过程,首先在虚拟机运行的时候,运行时 常量池会保存大量的符号引用,这些符号引用可以看成是每个方法的间接引用,如果代表栈帧A的方法想调用代表栈帧B的方法,那么这个虚拟机的方法调用指令就 会以B方法的符号引用作为参数,但是因为符号引用并不是直接指向代表B方法的内存位置,所以在调用之前还必须要将符号引用转换为直接引用,然后通过直接引 用才可以访问到真正的方法,这时候就有一点需要注意,如果符号引用是在类加载阶段或者第一次使用的时候转化为直接应用 ,那么这种转换成为静态解析 ,如果是在运行期间转换为直接引用 ,那么这种转换就成为动态连接

(三)方法的返回地址

 

这一部分的内容相对于前面的两个结构而言会更容易理解一点.

方法的返回分为两种情况,一种是正常退出,退出后会根据方法的定义来决定是否要传返回值给上层的调用者,一种是异常导致的方法结束,这种情况是不会传返回值给上层的调用方法.

不过无论是那种方式的方法结束,在退出当前方法时都会跳转到当前方法被调用的位置,如果方法是正常退出的,则调用者的PC计数器的值就可以作为返回地址,如果是因为异常退出的,则是需要通过异常处理表来确定.

JVM学习之:虚拟机中的运行时栈帧总结(一)   有提到,方法的的一次调用就对应着栈帧在虚拟机栈中的一次入栈出栈操作,因此方法退出时可能做的事情包括,恢复上层方法的局部变量表以及操作数栈,如果有返回值的话,就把返回值压入到调用者栈帧的操作数栈中,还会把PC计数器的值调整为方法调用入口的下一条指令

 

分享到:
评论

相关推荐

    JVM内幕:java虚拟机详解

    Java虚拟机(JVM)是运行Java应用程序的核心组件,它提供了一个可移植、安全且高性能的环境。本文将深入探讨JVM的内部架构及其各个组成部分的功能。 #### 二、Java虚拟机的内部组件 Java虚拟机的内部组件可以分为两大...

    JVM中[虚拟机栈]的所有内容-pdf

    每个线程在启动时都会创建一个独立的虚拟机栈,用于存储每个线程在执行过程中产生的栈帧(Stack Frame)。栈帧是虚拟机栈中存储的基本单元,与Java方法调用紧密关联。 栈帧是一个内存区块,包含了多个数据结构,如...

    理解JVM虚拟机原理(学习资料).docx

    Java虚拟机(JVM)是Java编程语言的核心组成部分,它为Java程序提供了跨平台的运行环境。Java的“一次编译,到处运行”的特性得益于JVM的存在。JVM是一个软件,它在不同的操作系统上都有相应的版本,如Windows、...

    2024年java面试题-jvm之java虚拟机面试题

    ### 2024年Java面试题:JVM之Java虚拟机面试题 #### Java内存模型及基础知识 **1. Java代码如何被计算机识别** Java程序最初由开发人员使用Java语法编写,这些代码人类可读但计算机无法直接理解。为了使计算机...

    JVM虚拟机复习宝典

    ### JVM虚拟机复习宝典:深入理解Java内存区域与对象创建机制 #### 一、Java内存区域概述 Java虚拟机(JVM)管理的内存主要分为两大部分:线程独占的内存区域和线程间共享的内存区域。下面将详细介绍这两部分内存...

    15.运行时栈帧结构1

    运行时栈帧结构是Java虚拟机(JVM)中的一种数据结构,用于支持虚拟机进行方法调用和方法执行。每个方法的调用开始到结束都对应着一个栈帧在虚拟机栈中的入栈到出栈的过程。栈帧中包括了局部变量表、操作数栈、动态...

    JVM虚拟机面试题汇总

    - **动态链接(Dynamic Link)**:包含一个指向运行时常量池中该栈帧所属方法的引用。 - **方法返回地址(Return Address)**:调用者上下文的信息,用来恢复之前的字节码指令地址。 3. **本地方法栈(Native Method ...

    javajvm虚拟机原理学习教案.pptx

    Java虚拟机(JVM)是Java程序运行的核心,它是一个抽象的计算机系统,负责解释和执行Java代码。在深入理解JVM的原理时,我们主要关注以下几个方面: 1. **Java虚拟机的生命周期**: - 每当我们运行一个Java程序,...

    深入浅出jvm虚拟机视频大全(jvm性能调优+内存模型+虚拟机原理)

    ### JVM虚拟机基础概念 ...通过深入学习JVM虚拟机的相关知识,不仅能够帮助开发者更好地理解Java程序的运行机制,还能够在实际开发过程中针对具体问题采取有效的优化措施,提升程序的运行效率和用户体验。

    JVM学习笔记.docx

    Java虚拟机(JVM)是Java程序运行的核心,它负责解释和执行字节码,提供了一个平台无关的运行环境。本篇JVM学习笔记主要涵盖了以下几个核心知识点: 1. **运行时数据区**: - **程序计数器**:记录当前线程执行的...

    JVM分享java虚拟机

    类装载器负责加载类文件到JVM内存中,运行数据区包括堆、栈、方法区和程序计数器等,它们各自存储不同类型的运行时数据。执行引擎则是JVM的心脏,执行字节码并进行垃圾回收。本地方法接口用于调用非Java语言编写的...

    javajvm虚拟机原理PPT学习教案.pptx

    在本教程中,我们将深入探讨JVM的生命周期、体系结构、类加载过程、运行时数据区以及Java类文件的结构。 **Java虚拟机生命周期** 每个Java程序启动时,会创建一个JVM实例。程序运行在自己的JVM实例中,当程序结束或...

    Java虚拟机(JVM)面试题 51道.pdf

    Java虚拟机(JVM)是Java程序的运行环境,它是Java语言的核心组件之一。JVM 负责将Java字节码转换为机器代码,并执行机器代码。以下是JVM面试题的一些知识点: Java内存模型 Java内存模型是JVM中的一种抽象概念,...

    实战JAVA虚拟机 JVM故障诊断与性能优化

    1. **Java虚拟机(JVM)基础**:JVM是Java语言的运行环境,它负责执行字节码并提供类加载、运行时数据区、内存管理和垃圾回收等功能。了解JVM的工作原理对于优化Java应用至关重要。 2. **类加载机制**:JVM通过类...

    深入理解JVM-java虚拟机栈.docx

    Java虚拟机栈(JVM Stack)是Java虚拟机的核心组件之一,它负责管理方法执行时的内存模型。栈是线程私有的,每个线程在启动时都会创建一个虚拟机栈,栈的生命周期与线程同步,即随线程创建而创建,随线程结束而销毁...

    JVM(Java虚拟机)详解.pdf

    JVM(Java虚拟机)是一个抽象的计算模型,提供了一个运行环境,能够运行 Java 字节码。JVM 可以解读指令代码并与底层进行交互,包括操作系统平台和执行指令并管理资源的硬件体系结构。 二、JVM 内存模型 JVM 内存...

    深入JAVA虚拟机 随书源码 JVM规范

    首先,我们来看《深入JAVA虚拟机》这本书,它涵盖了JVM的各个关键方面,包括指令集、运行时数据区、方法区、堆内存、栈帧结构、编译与优化、异常处理和安全性等。书中通过实例解析,帮助读者理解JVM如何处理Java程序...

    JVM知识点汇总

    JVM在运行时,将内存空间分为若干个区域,主要包括方法区、堆内存、虚拟机栈、本地方法栈、程序计数器五个部分。 1. 方法区 方法区主要用于存储类信息、常量、静态变量等数据。在jdk1.7之前,方法区是堆的一个逻辑...

Global site tag (gtag.js) - Google Analytics