【jvm】虚拟机栈

目录

        • 一、背景
        • 二、栈与堆
        • 三、声明周期
        • 四、作用
        • 五、特点(优点)
        • 六、可能出现的异常
        • 七、设置栈内存大小
        • 八、栈的存储单位
        • 九、栈运行原理
        • 十、栈帧的内部结构
          • 10.1 说明
          • 10.2 局部变量表
          • 10.3 操作数栈
          • 10.4 动态链接
          • 10.5 方法返回地址
          • 10.6 一些附加信息
        • 十一、代码示例
          • 11.1 StackOverflowError异常演示
          • 11.2 默认情况下深度
          • 11.3 栈大小改为-Xss256k的深度

一、背景
  • 1.由于跨平台的设计,java的指令是根据栈来设计的
  • 2.不同平台cpu架构不同,因此不能设计为基于寄存器的
  • 3.优点是跨平台,指令集小,编译器容易实现
  • 4.缺点是性能下降,实现同样的功能需要更多的指令
二、栈与堆
  • 1.栈是运行时的单位
  • 2.堆是存储的单位
  • 3.栈解决程序的运行问题,即程序如何执行,如何处理数据
  • 4.堆解决数据存储的问题,数据如何放,放在哪
  • 5.java虚拟机栈(java virtual machine stack),早期也叫java栈
  • 6.每个线程在创建时都会创建一个虚拟机栈,虚拟机栈内部保存一个个的栈帧(stack frame),对应java方法调用
  • 7.虚拟机栈是线程私有的
三、声明周期
  • 1.生命周期和线程一致
四、作用
  • 1.主管java程序的运行,保存方法的局部变量(8种基本数据类型、对象的引用地址)、部分结果,并参与方法的调用和返回
五、特点(优点)
  • 1.是一种快速有效的分配存储方式,访问速度仅次于程序计数器
  • 2.jvm直接对java栈的操作只有两个:a.每个方法执行,伴随着进栈(入栈、压栈)b.执行结束后的出栈工作
  • 3.对于栈来说不存在垃圾回收问题
六、可能出现的异常
  • 1.java虚拟机规范允许java栈的大小是动态的或者是固定不变的
  • 2.如果采用固定大小的java虚拟机栈,每一个线程的java虚拟机栈容量可以在线程创建的时候独立选定,如果线程请求分配的栈容量超过java虚拟机栈允许的最大容量,java虚拟机将会抛出一个StackOverflowError异常
  • 3.如果java虚拟机栈可以动态扩展,并且在尝试扩展时无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的虚拟机栈,java虚拟机栈会抛出一个OutOfMemoryError异常
七、设置栈内存大小
  • 1.可以使用参数-Xss选项来设置线程的最大栈空间
  • 2.栈大小直接决定了函数调用的最大可达深度
  • 3.单位有k(K)、m(M)、g(G)
  • 4.linux、macOS、oracle solaris默认1024KB(jdk11)
  • 5.windows:默认值取决于虚拟内存
  • 6.设置为1024KB有下列写法:-Xss1m、-Xss1024k、-Xss1048576
八、栈的存储单位
  • 1.每个线程都有各自的栈,栈中的数据是以栈帧(Stack Frame)的格式存在
  • 2.在这个线程上正在执行的每个方法都各自对应一个栈帧(Stack Frame)
  • 3.栈帧是一个内存区块,是一个数据集,维系方法执行过程中的各种数据信息
九、栈运行原理
  • 1.jvm直接对java栈的操作只有两个,即对栈帧的压栈和出栈,遵循先进后出、后进先出原则
  • 2.在一条活动线程中,一个时间点上,只会有一个活动的栈帧。即只有当前正在执行的方法的栈帧(栈顶栈帧)是有效的,这个栈帧被称为当前栈帧(Current Frame),与当前栈帧相对应的方法就是当前方法(Current Method),定义这个方法的类就是当前类(Current Class)
  • 3.执行引擎运行的所有字节码指令只针对当前栈帧进行操作
  • 4.如果在该方法调用了其他方法,对应的新的栈帧会被创建出来,放在栈的顶端,成为新的当前帧
  • 5.不同线程中所包含的栈帧是不允许存在相互引用的,即不可能在一个栈帧之中引用另外一个线程的栈帧
  • 6.如果当前方法调用了其它方法,方法返回之际,当前栈帧会传回此方法的执行结果给前一个栈帧,然后虚拟机会丢弃当前栈帧,使得前一个栈帧重新成为当前栈帧
  • 7.java方法有两种返回函数的方式,一种是正常的函数返回,使用return指令;另外一种是抛出异常(该异常未捕获处理,以抛出异常结束),不管使用哪种方式,都会导致栈帧被弹出
十、栈帧的内部结构
10.1 说明
  • 1.每个栈帧中存储着局部变量表(Local Variables)、操作数栈(或表达式栈)(Operand Stack)、动态链接(或指向运行时常量池的方法引用)(Dynamic Linking)、方法返回地址(或方法正常退出或异常退出的定义)(Return Address)、一些附加信息
10.2 局部变量表
  • 点我链接
10.3 操作数栈
  • 点我链接
10.4 动态链接
  • 点我链接
10.5 方法返回地址
  • 点我链接
10.6 一些附加信息
  • 1. 栈帧中还允许携带与Java虚拟机实现相关的一些附加信息。例如,对程序调试提供支持的信息
十一、代码示例
11.1 StackOverflowError异常演示
package com.learning.stack;

/**
 * @Author wangyouhui
 * @Description StackOverflowError异常
 **/
public class StackOverflowErrorLearning {
    public static void main(String[] args) {
        main(args);
    }
}

11.2 默认情况下深度
package com.learning.stack;

/**
 * @Author wangyouhui
 * @Description StackOverflowError异常
 **/
public class StackOverflowErrorLearning {
    private static int count = 1;
    public static void main(String[] args) {
        System.out.println(count);
        count ++;
        main(args);
    }
}

在这里插入图片描述

11.3 栈大小改为-Xss256k的深度

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

明御安全网关任意文件上传漏洞复现

简介 安恒信息明御安全网关(NGFW) 秉持安全可视、简单有效的理念,以资产为视角的全流程防御的下一代安全防护体系,并融合传统防火墙、入侵防御系统、防病毒网关、上网行为管控、VPN网关、威胁情报等安全模块于一体的智慧化安全网关。 较低版本的系统存…

淘宝API技术文档解析,从入门到实战

探索淘宝数据的奥秘,淘宝是目前国内最大的B2C电商平台之一,每天都会产生海量的数据。借助淘宝API技术文档,我们可以轻松地获取到这些数据,从而为电商运营和数据分析提供有力支持。 1.什么是淘宝API? 淘宝API&#xf…

用免费GPU线上优化猫狗识别实践

该部分以“猫狗识别模型”为例,学习如何直接通过平台提供的开发环境调用GPU资源 一.学习准备 获取官方代码文件:https://platform.virtaicloud.com/gemini_web/workspace/space/n9tte8i2aspd/project/list 二.创建项目 1)进入趋动云用户工…

轻量封装WebGPU渲染系统示例<12>- 基础3D对象实体(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/main/src/voxgpu/sample/PrimitiveEntityTest.ts 此示例渲染系统实现的特性: 1. 用户态与系统态隔离。 细节请见:引擎系统设计思路 - 用户态与系统态隔离-CSDN博客 2. 高频调用与低频调用隔…

不会写文档的程序员不是好的程序员

在当今数字化的世界中,软件开发行业正经历着前所未有的繁荣。从移动应用到大型企业系统,软件构建了现代社会的基础。在IT行业中,文档是一种非常重要的沟通工具。它可以帮助程序员和客户及团队成员之间进行有效的沟通和协作,提高工…

基于springboot实现原创歌曲分享平台系统项目【项目源码+论文说明】

基于springboot实现原创歌曲分享平台系统演示 摘要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理平台应运而生…

工业自动化工厂PLC远程控制网关物联网应用

远程控制网关在工厂自动化领域中起到了至关重要的作用,特别是在工厂PLC数据通讯方面。它充当着数据传输的桥梁,连接了工厂中的各类设备和系统,实现了远程监控和控制的功能。本文将详细介绍远程控制网关在工厂PLC数据通讯中的应用。 远程控制网…

项目上线前发现严重Bug怎么办?

今天分享一个面试问题,现在有一个面试场景: 项目计划明天发布,但是在今天你作为测试人员发现了一个严重的bug,市场相关人员又在催发布的事情,这个时候你应该怎么办? 这是测试工程师不管是在面试&#xff0…

大数据毕业设计选题推荐-智慧小区大数据平台-Hadoop-Spark-Hive

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

gitlab数据备份和恢复

gitlab数据备份 sudo gitlab-rake gitlab:backup:create备份文件默认存放在/var/opt/gitlab/backups路径下, 生成1697101003_2023_10_12_12.0.3-ee_gitlab_backup.tar 文件 gitlab数据恢复 sudo gitlab-rake gitlab:backup:restore BACKUP1697101003_2023_10_12_…

苹果加大对印度的扶持,提高在其生产iphone的比重

KlipC报道:跟踪苹果产业链,有分析师预计2023年全球约12%-14%的iphone在印度生产,预计2024年,印度将生产20%-25%的iphone。 KlipC的合伙人Andi D表示:“近年来随着苹果对中国的以来,印度已经成为高科技制造和…

EasyExcel实现动态表头功能

EasyExcel实现动态表头功能 开发过程中,大部分都会使用到导出报表功能,目前阶段会用得有 poi导出(暂无), easyexcel导出(官方文档,https://easyexcel.opensource.alibaba.com/docs/current/&am…

竞赛 深度学习驾驶行为状态检测系统(疲劳 抽烟 喝水 玩手机) - opencv python

文章目录 1 前言1 课题背景2 相关技术2.1 Dlib人脸识别库2.2 疲劳检测算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手机检测3.4 抽烟检测3.5 喝水检测 4 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于深度学习的驾…

V90 EPOS模型下位置控制(完整SCL源代码)

V90EPOS模式下点动控制详细应用介绍和控制源代码,请查看下面文章链接: V90伺服EPOS模式点动控制(详细介绍+完整SCL代码)-CSDN博客文章浏览阅读29次。V90伺服驱动器采用西门子标准报文111加FB284(SINA_POS)详细的报文组态和功能块请参考下面文章链接:博途1200/1500PLC V90 P…

基于 golang 从零到一实现时间轮算法 (三)

引言 本文参考小徐先生的相关博客整理,项目地址为: https://github.com/xiaoxuxiansheng/timewheel/blob/main/redis_time_wheel.go。主要是完善流程以及记录个人学习笔记。 分布式版实现 本章我们讨论一下,如何基于 redis 实现分布式版本的…

nginx知识点-1

#因为是最小化安装,先安装vim编辑器,net-tools查看端口,psmisc可以使用killall命令bash-completion tab补全命令(需要重启生效)[rootlocalhost ~]# yum -y install net-tools psmisc vim bash-completion [rootlocalhost ~]# tar zxvf nginx-…

SourceTree 4.1.5(Git客户端)

SourceTree是一款Git和Hg客户端管理工具软件,同时支持Mercurial和Subversion版本控制系统。它具有以下功能: 版本控制:SourceTree可以创建、克隆、提交、push、pull和合并等操作,支持分布式版本控制系统,使得开发者可…

图片文件过大怎么压缩?五种压缩方法大全

图片文件过大怎么压缩?不知道大家有没有遇到过这样的尴尬情况,当我们将一些图片上传到某个网站的时候,被提示图片大小操作了网站的限制而被禁止上传,我相信很多人都遇到过吧,其实这是网站的一张防御措施,防…

计算机毕业设计 基于SpringBoot房屋租赁管理系统的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

如何更改IP地址为美国IP?美国静态住宅代理如何搭建?

相信很多做跨境电商或外贸如TikTok shop、Facebook商店、Amazon、领英的玩家都需要搭建独享的美国IP环境来运营店铺,那么如何搭建稳定独享的IP环境呢?加下来为你详细介绍,助力您的跨境业务。 一、选择合适的代理IP 代理IP可以帮助隐藏用户真…
最新文章