前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JVM运行时数据区虚拟机栈

JVM运行时数据区虚拟机栈

作者头像
晓果冻
发布2022-09-08 14:00:09
1990
发布2022-09-08 14:00:09
举报

JVM运行时数据区虚拟机栈

虚拟机栈概述

由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。 优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。

Java虚拟机栈是线程私有的,其生命周期与线程相同。每个方法在执行的同时都会创建一个栈帧。

Java虚拟机栈描述的是Java方法执行的内存模型,每一次方法调用都对应着一个栈帧。

  • 这里区分下栈(也就是虚拟机栈)和堆,栈是运行时的单位,而堆是存储的单位。
    • 栈解决程序的运行问题,即程序如何执行,或者说如何处理、生成数据(编译时期)
    • 堆解决的是数据存储的问题,即数据怎么放,放哪里

每个栈帧中都会保存方法的局部标量、操作数栈、动态链接、方法出口等信息。

  • 局部变量表
    • 8种基本数据类型(byte、char、boolean、short、int、float、double、long)
    • 引用类型(数组、类、接口)
  • 操作数栈:主要用于保存计算过程的中间结果,同时作为计算过程中变量临时的存储空间。

栈执行的顺序:先进后出,后进先出

image-20210426185839561
image-20210426185839561

虚拟机栈中可能出现的俩种错误,一种是栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常。另一种是虚拟机栈是可以动态扩展的,如果扩展时无法申请到足够的内存,将会抛出OutOfMemoryError异常。

image-20210426190441988
image-20210426190441988
代码语言:javascript
复制
package com.company;

public class Main {

    public static void main(String[] args) {
	// write your code here
        //m1();
        m4();
    }
    private static void m4(){
      m4();
    }
    private static String m2(){
        System.out.println("方法2进栈");
        String s = m3();
        System.out.println("方法2出栈");
        return s;
    }

    private static String m3(){
        System.out.println("方法3进栈");
        String s = "";
        System.out.println("方法3出栈");
        return s;
    }

    private static String m1(){
        System.out.println("方法1进栈");
        String s = m2();
        System.out.println("方法1出栈");
        return s;
    }
}

我们可以使用虚拟机参数-Xss 选项来设置线程的最大栈空间,栈的大小直接决定了函数调用的最大可达深度;

代码语言:javascript
复制
-Xss size

设置线程堆栈大小(以字节为单位)。附加字母k或K表示KB,m或M表示MB,和g或G表示GB。默认值取决于平台: Linux / x64(64位):1024 KB macOS(64位):1024 KB Oracle Solaris / x64(64位):1024 KB Windows:默认值取决于虚拟内存

逃逸啥的以后在学,脑瓜疼。。。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • JVM运行时数据区虚拟机栈
    • 虚拟机栈概述
    相关产品与服务
    对象存储
    对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档