JVM运行时数据区虚拟机栈
2023-06-13 09:12:14 时间
JVM运行时数据区虚拟机栈
虚拟机栈概述
由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。 优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。
Java虚拟机栈是线程私有的,其生命周期与线程相同。每个方法在执行的同时都会创建一个栈帧。
Java虚拟机栈描述的是Java方法执行的内存模型,每一次方法调用都对应着一个栈帧。
- 这里区分下栈(也就是虚拟机栈)和堆,栈是运行时的单位,而堆是存储的单位。
- 栈解决程序的运行问题,即程序如何执行,或者说如何处理、生成数据(编译时期)
- 堆解决的是数据存储的问题,即数据怎么放,放哪里
每个栈帧中都会保存方法的局部标量、操作数栈、动态链接、方法出口等信息。
- 局部变量表
- 8种基本数据类型(byte、char、boolean、short、int、float、double、long)
- 引用类型(数组、类、接口)
- 操作数栈:主要用于保存计算过程的中间结果,同时作为计算过程中变量临时的存储空间。
栈执行的顺序:先进后出,后进先出
虚拟机栈中可能出现的俩种错误,一种是栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常。另一种是虚拟机栈是可以动态扩展的,如果扩展时无法申请到足够的内存,将会抛出OutOfMemoryError异常。
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 选项来设置线程的最大栈空间,栈的大小直接决定了函数调用的最大可达深度;
-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:默认值取决于虚拟内存
逃逸啥的以后在学,脑瓜疼。。。
相关文章
- java 针对jvm的面试题_24个Jvm面试题总结及答案
- JVM调优工具详解
- JVM运行时数据区-方法区
- 高并发服务优化篇:JVM--工程师进阶的必经之路
- 一个分布式 JVM 监控工具,非常实用!
- JVM:第二章:设计一个刚好在一秒堆溢出的程序
- 记一次 JVM CPU 使用率飙高问题的排查过程
- jvm之虚拟机内存的各个区域(一)
- Spring Boot凭什么成为JVM圈的框 架“一哥”
- jvm系列之垃圾收集算法
- 死磕到底JVM,花了5年时间,对加载机制有了不一样的理解
- 【JVM】JPS命令详解释 - Java Virtual Machine Process Status Tool
- Hbase JVM优化详解大数据
- JVM简介详解编程语言
- Tomcat的JVM设置和连接数设置详解编程语言
- [三] java虚拟机 JVM字节码 指令集 bytecode 操作码 指令分类用法 助记符详解编程语言
- 参数Linux下修改JVM内存参数的方法(linux修改jvm内存)
- 最详细的JVM&GC讲解
- Linux下调整JVM参数的步骤(linux设置jvm参数)
- 使用JVM在Linux系统中执行多线程操作(jvm线程linux)
- 如何在Linux下修改JVM参数配置(linux修改jvm参数)
- Oracle JVM大路在何方(jvm路径 oracle)
- Oracle的JVM实现高性能成就突破(jvm属于oracle)
- 在Oracle JVM环境下进行下载的指南(oracle jvm下载)