《JVM第5课》虚拟机栈

news2024/11/7 4:51:20

无痛快速学习入门JVM,欢迎订阅本免费专栏

Java虚拟机栈(Java Virtual Machine Stack,简称JVM栈,又称Java方法栈)是 JVM 运行时数据区的一部分,主要用于支持Java方法的执行。每当一个新线程被创建时,JVM就会为这个线程分配一个私有的方法栈,线程执行过程中每个方法调用都会创建一个新的栈帧(Stack Frame),而这些栈帧会被组织成后进先出的栈结构。

在这里插入图片描述

1 栈知识点

  1. 线程私有

    • 每个线程都有自己的虚拟机栈,与其他线程的栈完全隔离。
    • 线程私有的特性确保了多线程环境下的数据安全和并发执行的效率。
  2. 生命周期与线程相同

    • 虚拟机栈的生命周期与线程的生命周期相同。当线程创建时,虚拟机栈也随之创建;当线程结束时,虚拟机栈也随之销毁。所以虚拟机栈不需要进行垃圾回收
  3. 栈深度

    • 如果方法调用层次过深或者循环调用导致栈帧数量过多,可能会发生栈溢出错误StackOverflowError。但如果线程太多,线程创建时没有足够的内存去创建虚拟机栈,则会抛出OutOfMemoryError错误。
    • 虚拟机栈的深度是可以配置的,通常通过JVM启动参数 -Xss 来设置每个线程的栈大小。合理配置栈深度可以避免栈溢出和内存不足的问题。
  4. 栈帧(Stack Frame)

    • 每个方法调用都会创建一个新的栈帧,并将其压入当前线程的虚拟机栈顶。
    • 当方法执行完毕后,对应的栈帧会被弹出并丢弃。
    • 栈帧是方法执行的基本单位,包含局部变量表、操作数栈、动态链接、方法出口信息等。

2 栈帧

每个栈帧包含了以下部分:

  1. 局部变量表:用于存放方法参数和方法内部定义的局部变量。局部变量表以变量槽(Variable Slot)的形式存在,每个槽可以存放一个基本数据类型、返回地址或者对象引用。对于64位的数据类型(如long和double),需要占用两个连续的槽位。
  2. 操作数栈:顾名思义,就是用来暂存要操作的数据和操作结果的地方。当执行字节码指令时,会从局部变量表或常量池中加载数据到操作数栈,然后根据指令完成相应的计算或操作,最后将结果存回操作数栈或局部变量表。
  3. 动态链接:包括对常量池的引用和对上层方法栈帧的引用,用于支持方法调用过程中的动态链接。
  4. 方法出口信息:包含正常完成出口和异常完成出口的信息,用于处理方法执行完毕后的返回值传递和异常抛出。

当一个方法被调用时,JVM会执行如下步骤:

  1. 创建栈帧:为被调用的方法创建一个新的栈帧,并将其压入当前线程的方法栈顶。
  2. 初始化栈帧:将方法参数传递到新的栈帧的局部变量表中,同时清空操作数栈。
  3. 执行字节码指令:根据方法体中的字节码指令,进行相应的计算和逻辑处理。
  4. 清理栈帧:当方法执行完毕后(无论是正常结束还是异常终止),将结果(如果有)返回给上一层方法,然后从方法栈中弹出当前栈帧。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java Executor RunnableScheduledFuture 总结

前言 相关系列 《Java & Executor & 目录》《Java & Executor & RunnableScheduledFuture & 源码》《Java & Executor & RunnableScheduledFuture & 总结》《Java & Executor & RunnableScheduledFuture & 问题》 涉及内容 《…

软考(中级-软件设计师)数据库篇(1101)

第6章 数据库系统基础知识 一、基本概念 1、数据库 数据库(Database ,DB)是指长期存储在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和扩展…

zynq PS端跑Linux响应中断

这篇文章主要是讲述如何在Zynq的PS上跑Linux启动IRQ,环境为vivado2019.1,petalinux2019.1 ubuntu20.04,本人初学者,欢迎批评指正 1. Vivado硬件设计 确保自定义IP的中断信号通过 IRQ_F2P 连接到PS端。在开始Petalinux配置之前&a…

R语言贝叶斯

原文链接:R语言贝叶斯进阶:INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247625527&idx8&snba4e50376befd94022519152609ee8d0&chksmfa8daad0cdfa…

qt QRadioButton详解

QRadioButton 是一个可以切换选中(checked)或未选中(unchecked)状态的选项按钮。单选按钮通常呈现给用户一个“多选一”的选择,即在一组单选按钮中,一次只能选中一个按钮。 重要方法 QRadioButton(QWidget…

webm格式怎么转换成mp4?这9种转换方法你肯定能够学会!

webm格式怎么转换成mp4?WebM,作为一种新兴的视频文件格式,虽然带着革新性的光芒,在视频压缩效率和播放流畅性上表现出色,却也面临着几个重要的挑战,这些问题直接影响了用户的体验,首先&#xff…

HTML 语法规范全解:构建清晰、兼容性强的网页基础

文章目录 一、代码注释1.1 使用注释的主要目的1.2 使用建议二、标签的使用2.1 开始标签和结束标签2.2 自闭合标签2.3 标签的嵌套2.4 标签的有效性三、属性四、缩进与格式4.1 一致的缩进4.2 元素单独占用一行4.3 嵌套元素的缩进4.4 避免冗长的行五、字符编码六、小结在开发 HTML…

10 P1094 [NOIP2007 普及组] 纪念品分组

题目&#xff1a; 代码&#xff1a; #include<iostream> using namespace std; # define M 100 #include<algorithm> int sa[100005];int main() {int w,n;cin>>w>>n;for(int i1;i<n;i){cin>>sa[i];}sort(sa1,sa1n);int l1;int rn;int count…

LeetCode.冗余连接(并查集以及广度优先搜索)

684.冗余连接| 传送门&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 树可以看成是一个连通且 无环 的 无向 图。 给定往一棵 n 个节点 (节点值 1&#xff5e;n) 的树中添加一条边后的图。添加的边的两个顶点包含在 1 到 n 中间&#xff0c;且这条附加的边不属于树中…

一文彻底整明白,基于Ollama工具的LLM大语言模型Web可视化对话机器人部署指南

在上一篇博文中&#xff0c;我们在本地部署了Llama 3 8B参数大模型&#xff0c;并用 Python 写了一个控制台对话客户端&#xff0c;基本能愉快的与 Llama 大模型对话聊天了。但控制台总归太技术化&#xff0c;体验不是很友好&#xff0c;我们希望能有个类似 ChatGPT 那样的 Web…

BES2600WM---HiLink RM56 EVK

0 Preface/Foreword 1 环境搭建 1.1 安装依赖工具 sudo apt-get install build-essential gcc g make zlib* libffi-dev e2fsprogs pkg-config flex bison perl bc openssl libssl-dev libelf-dev libc6-dev-amd64 binutils binutils-dev libdwarf-dev u-boot-tools mtd-utils…

Leetcode21:合并两个有效链表

原题地址&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示…

51c嵌入式~IO合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/12383193 一、单片机通信数据接收解析方法 前阵子一朋友使用单片机与某外设进行通信时&#xff0c;外设返回的是一堆格式如下的数据&#xff1a; AA AA 04 80 02 00 02 7B AA AA 04 80 02 00 08 75 AA AA 04 80 02 00 9B E2…

java或c#是如何对数据库的表字段加密的处理的?

对于表格数据的加密处理&#xff0c;通常涉及到对数据库中存储的数据进行加密&#xff0c;以保护敏感信息。 Java示例&#xff08;使用AES算法加密数据库表数据&#xff09; 首先&#xff0c;你需要一个数据库连接&#xff0c;这里假设你使用的是JDBC连接MySQL数据库。以下是…

Android Studio Dolphin 下载、安装与配置教程

文章目录 Android Studio Dolphin简介一、核心特性二、新增功能三、用户体验优化 一&#xff0c;下载百度网盘迅雷云盘 二&#xff0c;安装三&#xff0c;下载组件四&#xff0c;添加SDK五&#xff0c;创建项目六&#xff0c;安装 Device模拟器运行项目 Android Studio Dolphin…

java开发等一些问题,持续更新

微服务和单服务的区别 微服务&#xff08;Microservices&#xff09;和单体服务&#xff08;Monolithic Architecture&#xff09;是两种不同的软件架构风格&#xff0c;各有其特点和适用场景。 微服务架构&#xff1a; 模块化&#xff1a; 微服务架构将应用程序分解为一系列小…

全国分省灵活就业情况数据集(2015-2019年)

数据简介&#xff1a;就业是民生之本&#xff0c;是“六稳”“六保”之首&#xff0c;对于拥有14亿人口的中国而言&#xff0c;就业问题至关重要。“十四五”规划建议中指出&#xff0c;应强化就业优先政策&#xff0c;千方百计稳定和扩大就业&#xff0c;实现更充分更高质量就…

杂货 | 每日资讯 | 2024.10.31

注意&#xff1a;以下内容皆为AI总结 在2024年10月30日&#xff0c;人工智能领域涌现出一些重要的新发展和大事件。这些新进展涉及人工智能在金融、搜索技术以及大型科技公司业务扩展中的广泛应用。本文将详细解读当天的几大AI事件&#xff0c;以便大家更好地理解当今AI技术的…

分享几款开源好用的图片在线编辑,适合做快速应用嵌入

图片生成器是指一种工具或软件&#xff0c;用于自动生成图片或图像内容&#xff0c;通常依据用户设定的参数或模板进行操作。这种工具能够帮助用户快速创建视觉效果丰富的图像&#xff0c;而无需具备专业的设计技能。 在数字化时代&#xff0c;图片编辑已经成为日常工作和生活的…

elasticsearch 8.x 插件安装(四)之简繁体插件

elasticsearch 8.x 插件安装&#xff08;四&#xff09;之简繁体插件 elasticsearch插件安装合集 elasticsearch插件安装&#xff08;一&#xff09;之ik分词器安装&#xff08;含MySQL更新&#xff09; elasticsearch 8.x插件&#xff08;二&#xff09;之同义词安装如何解…