返回顶部
首页 > 资讯 > 后端开发 > Python >JVM 中的 returnAddress过程详解
  • 213
分享到

JVM 中的 returnAddress过程详解

2024-04-02 19:04:59 213人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录数据类型栈帧JVM是虚拟机,也是一种规范,他遵循着冯·诺依曼体系结构的设计原理。冯·诺依曼体系结构中,指出计算机处理的数据和指令都是二进制数,采用存储

JVM虚拟机,也是一种规范,他遵循着冯·诺依曼体系结构的设计原理。冯·诺依曼体系结构中,指出计算机处理的数据和指令都是二进制数,采用存储 程序方式不加区分的存储在同一个存储器里,并且顺序执行,指令由操作码和地址码组成,操作码决定了操作类型和所操作的数的数字类型,地址码则指出地址码和 操作数。从dos到window8,从unix到ubuntuCentos,还有Mac OS等等,不同的操作系统指令集以及数据结构都有着差异,而JVM通过在操作系统上建立虚拟机,自己定义出来的一套统一的数据结构和操作指令,把同一套语 言翻译给各大主流的操作系统,实现了跨平台运行,可以说JVM是java的核心,是java可以一次编译到处运行的本质所在。

参考文档:jvms12

数据类型

在 JVM 中,数据分为两大类:primitive types (原生类型)和 reference types(引用类型)。

引用类型,让 JVM 能更好的支持于面向对象语言的设计,引用类型的值用来指向内存中分配的类实例或者数组。JVM 规范中并没有详细规定引用类型的实现细节,比如引用应该通过何种方式去定位、访问堆中的对象,具体的对象访问方式取决于虚拟机的具体实现,比如 HotSpot 有其自己的实现方案。

目前主流的访问方式有使用句柄和直接指针两种:

其中使用直接指针访问的方式,类似于 c++ 中的虚表(虚表就是指向对象类型数据的指针)。这两种对象访问方式各有优劣,使用句柄访问的最大好处就是 reference 中存储的是稳定的句柄地址,在对象被移动(比如垃圾回收时,整理内存空间,会移动对象的存储位置)时只会改变句柄中示例数据的指针,而 reference 本身不需要修改。

使用直接指针访问的最大好处就是速度更快,节省了一次内存寻址的时间开销。

原生数据类型包括:numeric types, boolean type, returnAddress type。其中 returnAddress 数据只存在于字节码层面,与编程语言无关,也就是说,我们在 Java 语言中是不会直接与 returnAddress 类型的数据打交道的。

returnAddress 类型的值是指向字节码的指针,不管是物理机还是虚拟机,运行时内存中的数据总归可分为两类:代码,数据。对于冯诺依曼结构的计算机,指令数据和数值数据都存储在内存中,而哈弗结构的计算机,将程序指令与数据分开存储。

对于 JVM 来说,程序就是存储在方法区的字节码指令,而 returnAddress 类型的值就是指向特定指令内存地址的指针。

JVM支持多线程,每个线程有自己的程序计数器(pc reGISter),而 pc 中的值就是当前指令所在的内存地址,即 returnAddress 类型的数据,当线程执行 native 方法时,pc 中的值为 undefined。

栈帧

栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,栈帧中存储了方法的局部变量表,操作数栈,动态连接,和方法返回地址等信息。在程序编译时,栈帧中需要多大的局部变量表,多深的操作数栈都已经完全确定了,并且写在方法表的 Code 属性中。

当一个方法开始执行后,只有两种方式可以退出,第一种方式是执行引擎遇到任意一个方法返回的字节码指令,这种方式称为正常完成出口;另外一种退出方式是,在方法执行过程中遇到异常,且该异常没有被被捕获,称为异常完成出口。

无论是哪种退出方式,在方法退出后,都需要返回到该方法被调用的位置(地址),让程序继续执行。一般来说,方法执行前,会保存调用者当前的 PC 计数器中的值,当方法正常退出时,将该 PC 计数器的值会作为返回地址,返回给调用者。在方法异常退出时,返回地址是通过异常处理器表来确定的。

方法退出的过程实际上就等于把当前栈帧出栈,一般过程为:

  • 恢复上层方法的局部变量表和操作数栈
  • 把返回值压入调用者栈帧的操作数栈中
  • 调整 PC 计数器的值,以指向方法调用指令后面的一条指令

到此这篇关于JVM 中的 returnAddress的文章就介绍到这了,更多相关JVM returnAddress内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JVM 中的 returnAddress过程详解

本文链接: https://lsjlt.com/news/147699.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JVM 中的 returnAddress过程详解
    目录数据类型栈帧JVM是虚拟机,也是一种规范,他遵循着冯·诺依曼体系结构的设计原理。冯·诺依曼体系结构中,指出计算机处理的数据和指令都是二进制数,采用存储...
    99+
    2024-04-02
  • JVM中的returnAddress过程是什么
    本篇内容主要讲解“JVM中的returnAddress过程是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JVM中的returnAddress过程是什么”吧!JVM是虚拟机,也是一种规范,他...
    99+
    2023-06-30
  • JVM的类加载过程详细说明
    目录一、基础知识二、加载三、验证四、准备五、解析六、核心阶段:初始化七、双亲委派机制八、总结一、基础知识 我们平时写的Java写代码一般都是.java文件,编译成为.class字节码...
    99+
    2024-04-02
  • JVM中Class文件的加载过程
    这篇文章主要讲解了“JVM中Class文件的加载过程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JVM中Class文件的加载过程”吧!Class文件加载过程JVM加载Class文件主要分3...
    99+
    2023-06-16
  • 详解JVM中的GC调优
    目录那些GC的默认值GC的选择GC的最大线程个数初始化heap size最大的heap size分层编译技术我们到底要什么最大暂停时间吞吐率那些GC的默认值 其实GC或者说JVM的参...
    99+
    2024-04-02
  • Java中jvm的执行过程是什么
    这期内容当中小编将会给大家带来有关Java中jvm的执行过程是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2....
    99+
    2023-06-14
  • jvm中类加载过程的示例分析
    这篇文章主要介绍jvm中类加载过程的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!类加载过程:1、加载阶段;2、验证阶段;3、准备阶段,主要是将类变量在方法区进行内存分配并进行初始化;4、解析阶段;5、初始化...
    99+
    2023-06-20
  • Java VisualVM监控远程JVM(详解)
    我们经常需要对我们的开发的软件做各种测试, 软件对系统资源的使用情况更是不可少, 目前有多个监控工具, 相比JProfiler对系统资源尤其是内存的消耗是非常庞大,JDK1.6开始自带的VisualVM就是不错的监控工具.这个工具就在JAV...
    99+
    2023-05-30
    java visualvm 监控远程
  • MySQL中存储过程的详细详解
    目录概述优点缺点mysql存储过程的定义存储过程的基本语句格式存储过程的使用定义一个存储过程定义一个有参数的存储过程定义一个流程控制语句 IF ELSE定义一个条件控制语句 CASE定义一个循环语句 WHILE定义一个循...
    99+
    2022-06-26
    mysql存储过程实例详解 数据库存储过程 mysql创建存储过程的语句
  • java中的PriorityQueue类过程详解
    目录一、什么是优先级队列1、概念2、案例演示特性3、数据结构一、什么是优先级队列 1、概念 我们都知道队列,队列的核心思想就是先进先出,这个优先级队列有点不太一样。优先级队列中,数据...
    99+
    2024-04-02
  • Java jvm中Code Cache案例详解
    Code Cache JVM生成的native code存放的内存空间称之为Code Cache;JIT编译、JNI等都会编译代码到native code,其中JIT生成的nativ...
    99+
    2024-04-02
  • JVM的类加载过程有哪些
    这篇文章给大家介绍JVM的类加载过程有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、基础知识我们平时写的Java写代码一般都是.java文件,编译成为.class字节码文件,然后类加载器把.class文件加载到...
    99+
    2023-06-15
  • JVM类加载过程是怎样的
    小编给大家分享一下JVM类加载过程是怎样的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!类加载过程Class 文件需要加载到虚拟机中之后才能运行和使用,那么虚拟机...
    99+
    2023-06-02
  • JVM中的程序计数寄存器PC是什么详解
    目录一、PC寄存器概述简单介绍二、PC寄存器的作用三、PC寄存器举例说明四、解决PC寄存器常问到的两个面试问题1、使用PC寄存器存储字节码指令地址有什么用呢?2、PC寄存器为什么会被...
    99+
    2024-04-02
  • J2ME与JVM的概念详解
    这篇文章主要介绍“J2ME与JVM的概念详解”,在日常操作中,相信很多人在J2ME与JVM的概念详解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”J2ME与JVM的概念详解”...
    99+
    2024-04-02
  • vue中this.$message的实现过程详解
    目录一、vue中为什么可以直接使用this.$message二、message组件的内部实现原理三、总结一、vue中为什么可以直接使用this.$message 1、Message在...
    99+
    2023-05-18
    vue中this.$message实现过程 vue中this.$message实现 vue this.$message
  • 超详细的JVM 深入解析
    工作之余,想总结一下JVM相关知识。Java运行时数据区:Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程...
    99+
    2023-06-02
  • java锁升级过程过程详解
    目录1.说到锁升级的过程,我们就得说一下对象头对象头对象头的存在形式接下来让我们看看锁升级的过程专业版解释我通过马士兵老师讲的带味道的栗子大致懂了这个过程(菜鸟版理解)总结1.说到锁...
    99+
    2024-04-02
  • JVM中四种GC算法案例详解
    目录介绍引用计数算法(Reference counting)算法思想:核心思想:优点:缺点:例子如图:标记–清除算法(Mark-Sweep)算法思想:优点缺点例子如图标记–整理算法算...
    99+
    2024-04-02
  • Hadoop的安装过程详解
    本篇内容主要讲解“Hadoop的安装过程详解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hadoop的安装过程详解”吧!安装JDK解压jdk压缩包 tar -zxvf&nb...
    99+
    2023-06-03
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作