JVM虚拟机系统性学习-运行时数据区(虚拟机栈、本地方法栈)

虚拟机栈

虚拟机栈为每个线程所私有的,如下图:
在这里插入图片描述

栈帧是什么?

栈帧存储了方法的局部变量表、操作数栈、动态链接和方法返回地址等信息

栈内存为线程私有的空间,每个方法在执行时都会创建一个栈帧,执行该方法时,就会将该方法所对应的栈帧入栈

  • 局部变量表:用于存储方法参数和定义在方法体内部的局部变量,局部变量表的容量在编译器就被确定下来

  • 操作数栈:在方法执行过程中,根据字节码指令,往栈中写入数据或者提取数据,即入栈、出栈

  • 动态链接:每一个栈帧内部都包含一个指向 运行时常量池 中该栈所属方法的引用,包含这个引用的目的就是为了支持当前方法的代码能够实现动态链接,在 Java 源代码被编译为字节码文件时,所有变量和方法都为符号引用保存在 class 文件的常量池,动态链接的作用就是将这些符号引用转换为调用方法的直接引用

  • 方法返回地址:无论哪种方法,在方法退出后都该回到该方法被调用的位置,因此 方法返回地址 存储调用者的 pc 计数器的值

这里说一下符号引用和直接引用的区别?

符号引用的字面量明确定义在 《Java虚拟机规范》 的 Class 文件格式中

直接引用就是直接指向目标的指针、相对偏移量或简介定位到目标的句柄

栈会溢出吗?

虚拟机栈会溢出的,如果方法调用的过多,导致栈中压入的栈帧太多,就会出现 栈溢出错误

  • 如果线程请求的栈深度大于虚拟机所允许的深度(Xss默认1m),会抛出 StackOverflowError 异常
  • 如果在创建新的线程时,没有足够的内存去创建对应的虚拟机栈,会抛出 OutOfMemoryError 异常

静态方法不能使用 this,而非静态方法中可以使用 this?

如果当前帧(虚拟机栈最上方的帧,即当前执行方法的栈帧)是由构造方法或者实例方法所产生的,那么该对象的 this 引用会被放在局部变量表中 index 为 0 的地方,因此在示例方法和构造方法中可以使用 this 关键字,而在静态方法的局部变量表中没有存储 this 的引用,因此无法使用 this 关键字

可以在 IDEA 中安装 jclasslib 插件,通过该插件来查看文件的字节码:

public class Test {
    public void testThis() {
        int b = 100;
        System.out.println("testThis");
    }
    public static void testNoThis() {
        int a = 10;
        System.out.println("testNoThis");
    }
}

对于上述生成的字节码文件,我们可以看到 testThis 方法的局部变量表中有 this 变量,而 testNoThis 方法的局部变量表中没有 this 变量,如下图:

在这里插入图片描述

本地方法栈

本地方法栈是虚拟机所使用到的 本地方法 ,比如 C++ 方法

一个 Native 方法就是一个 Java 调用非 Java 代码的接口

为什么需要本地方法?

Java是一门高级语言,我们不直接与操作系统资源、系统硬件打交道。如果想要直接与操作系统与硬件打交道,就需要使用到本地方法了

底层就是这么实现的,在多线程部分就会有很多 Java 调用 Native 方法的示例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/238650.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

11--常用类和基础API--01

1、API概述 1.1 什么是API API(Application Programming Interface),应用程序编程接口。 Java API是一本程序员的字典 ,是JDK中提供给我们使用的类的说明文档。这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的&#x…

文件系统理解

先前的博客我写了关于缓冲区的理解,顺便提及了在内存的文件是怎样管理的,本文就来描述在磁盘上的文件是怎么样。但要先了解了解磁盘。 在笔记本上机械磁盘被固态硬盘代替,因为固态硬盘更快,而且方便携带,机械硬盘若是受…

C++STL的list(超详解)

文章目录 前言构造函数capacitylist的访问insertswapsort 前言 看一下list, 在任意位置可以进行O(1)插入删除的操作。 它怎么实现这个东西?它其实就是一个带头双向循环链表。 #成员函数 构造函数 这里面的构造函数学完string和vector之后已经相当熟悉了。 capaci…

AI大模型报告:2023大模型可信赖研究报告

今天分享的AI系列深度研究报告:《AI大模型报告:2023大模型可信赖研究报告》。 (报告出品方:中国信通院) 报告共计:48页 大模型发展现状 大模型驱动新一轮科技革命 近十余年间,人工智能技术泛…

源码级详解Spring的三级缓存,循环依赖的处理流程

一.什么是三级缓存 1.一级缓存:存放已经初始化完成的Bean 2.二级缓存:存放半成品Bean,既实例化完成未初始化的Bean。 3.三级缓存:存放bean工厂 二.为什么是三级缓存 一级缓存是必须的,这个我们没有什么疑问。那为…

第6章:知识建模:概述、方法、实例

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

后缀数组模板

详细理解后缀数组求sa数组的函数,该函数可以看为主要分为三个部分,第一个部分是预处理;第二个部分是进行基数排序,首先根据第二关键词排序,然后根据第一关键字排序;第三个部分是根据排序后的结果重新为每个…

等保二级和三级的区别

等保二级和三级定级标准有什么区别?定级原则和方法介绍 网络安全等级保护,简称等保,是我国为了保障信息系统的安全运行,防止信息泄露、篡改、破坏等威胁,制定的一套信息安全管理制度。根据《信息安全技术网络安全等级保…

6.21二叉搜索树的最近公共祖先(L235-M)

算法: 可以和上一题一样做,但是最好还是要用上二叉搜索树的特性 遍历顺序无所谓,因为中不用写逻辑代码。 假如p3,q5 若当前遍历节点(比如6)比p和q都大,说明p和q一定在当前节点的左子树里面 …

Python数值类型(整形、浮点型和复数)及其用法

数值类型是计算机程序最常用的一种类型,既可用于记录各种游戏的分数、游戏角色的生命值、伤害值等,也可记录各种物品的价格、数量等,Python 提供了对各种数值类型的支持,如支持整型、浮点型和复数。 Python整型 Python 3 的整型…

Intel® Enclave Operation(三)

文章目录 前言一、Constructing an Enclave1.1 ECREATE1.2 EADD and EEXTEND Interaction1.3 EINIT Interaction1.4 Intel SGX Launch Control Configuration 二、Enclave Entry and Exiting2.1 Controlled Entry and Exit2.2 Asynchronous Enclave Exit (AEX)2.3 Resuming Exe…

web服务器之——建立两个基于ip地址访问的网站

目录 准备工作:web服务器搭建 第一步:挂载 第二步:编辑配置文件 第三步:安装软件包 第四步:启动httpd 查看配置文件: 第五步:设置防火墙状态: 重启服务: 查看状态&#xff1…

自己开发App,如何能兼顾效率与体验?

今天来聊聊一个现实但不简单的问题:如何能够做到自己开发App。 首先,在搜索引擎搜索“自己开发App”,会冒出一大堆类“手把手”的内容,超级详细、稍微浏览一些内容的引言部分,乍一看好像还挺合理,但点击进…

多地远程视频监控,如何集中连接与管理?

如今,远程视频监控已广泛应用于商超零售、酒店、工厂工地、IT机房、农业生产、医疗保健、公共安全等多种场景。其中,网络通信技术是远程监控技术中最为关键的技术,远程监控数字化应用的增长对广域网等基础IT建设提出更高的需求。 以广东某连锁…

python实战教学之python版“张万森,好久不见”

前言 WINTER IS COMING 最近《一闪一闪亮星星》的电影在火热预售中,家人们抢到票了嘛,前两天小编写了一篇“张万森,下雪了”的文章后,收到了不少小伙伴的反馈:“代码的运行结果只有文字,没有雪花啊”&#…

气温波动 C语言xdoj45

问题描述 最近一段时间气温波动较大。已知连续若干天的气温,请给出这几天气温的最大波动值是多少,即在这几天中某天气温与前一天气温之差的绝对值最大是多少。 输入说明 输入数据分为两行。 第一行包含了一个整数n,表示给出了连续n天…

JNPF低代码——全源码、免费部署的开发框架

低代码平台的概念很火爆,产品也是鱼龙混杂。 对于开发人员来说,在使用绝大部分低代码平台的时候都会遇到一个致命的问题:我在上面做的项目无法得到源码,完全黑盒。一旦我的需求平台满足不了,那就是无解。 与其他平台的…

便签电脑版下载教程,电脑便签用哪个

现在大家所熟知的电脑便签软件通常以电脑软件为主,过去那种贴满五颜六色的,几百张成一叠的桌面便利贴,可以实现随处粘贴,现在几乎已经被淘汰了,取而代之的是科技化的电脑便签软件。 在查找电脑便签软件时,…

helpdesk的工作流程是什么?

helpdes在IT部门中是一个非常重要的部门,负责为用户提供技术支持和问题解决方案。为了有效地提供这些服务,helpdesk需要建立一个清晰而高效的工作流程。本文将介绍helpdesk工作的典型流程,并探讨每个阶段的重要性。 1、用户报告问题 通常&…

RCG Self-conditioned Image Generation via Generating Representations

RCG: Self-conditioned Image Generation via Generating Representations TL; DR:将图像的无监督表征作为(自)条件(而非是将文本 prompt 作为条件),生成与原图语义内容一致的多样且高质量结果。视觉训练能…