一个人做网站 知乎,苏州网页制作培训,做外贸的阿里巴巴网站是哪个,南宁做网站推广nnsom一、产生背景 由于跨平台性的设计#xff0c;Java的指令都是根据栈来设计的#xff0c;不同平台的CPU架构不同#xff0c;所以不能设计为基于寄存器的。 二、概述 栈也叫栈内存#xff0c;主管Java程序的运行#xff0c;是在线程创建时创建#xff0c;线程销毁时销毁Java的指令都是根据栈来设计的不同平台的CPU架构不同所以不能设计为基于寄存器的。 二、概述 栈也叫栈内存主管Java程序的运行是在线程创建时创建线程销毁时销毁它的生命周期是跟随线程的生命周期线程结束栈内存也就释放对于栈来说不存在垃圾回收只要线程一结束该栈就over生命周期和线程一致是线程私有的。8种基本类型的变量对象的引用变量实例方法都是在函数的栈内存中分配。 三、特点 1栈是一种快速有效的分配存储方式访问速度仅次于程序计数器 2JVM直接对Java栈的操作只有2个即 a、每个方法执行伴随着进栈、出栈操作 b、方法结束后执行出栈操作 3对于栈来说不存在垃圾回收工作 四、栈中存什么 8中基本数据类型 对象的引用变量 实例方法。 byte、short、int、long、float、double、boolean、char 五、栈帧中存什么 栈中主要保存3种数据即 本地变量Local Variables输入参数和输出参数以及方法内的变量 栈操作Operand Stack记录出栈、入栈的操作 栈帧数据Frame Data包括类文件、方法等 备注java中的方法进入虚拟机后叫做栈帧。 六、栈的运行原理 栈中的数据都是以栈帧Stack Frame的格式存在栈帧是一个内存区块是一个数据集是一个有关方法(Method)和运行期数据的数据集当一个方法A被调用时就产生了一个栈帧 F1并被压入到栈中A方法又调用了 B方法于是产生栈帧 F2 也被压入栈B方法又调用了 C方法于是产生栈帧 F3 也被压入栈……执行完毕后先弹出F3栈帧再弹出F2栈帧再弹出F1栈帧……遵循“先进后出”/“后进先出”原则。每个方法执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息每一个方法从调用直至执行完毕的过程就对应着一个栈帧在虚拟机中入栈到出栈的过程。栈的大小和具体JVM的实现有关通常在256K~756K之间,约等于1MB左右。 七、栈中常见的异常 如何设置栈大小
7.1、概述 Java虚拟机规范允许Java栈的大小是动态的或者固定不变 如果采用固定大小的Java虚拟机栈那每一个线程的Java虚拟机栈容量可以在线程创建时独立选定如果线程请求分配的栈容量超过Java虚拟机栈允许的最大容量将会抛出异常 StackOverflowError异常 如果Java虚拟机栈可以动态扩展并且在尝试扩展时无法申请到足够的内存或者在创建新的线程时没有足够的内存去创建对应的虚拟机栈那么Java虚拟机将抛出异常 OutOfMemoryError异常是一个错误 7.2、默认情况下栈的大小
/*** Author : 一叶浮萍归大海* Date: 2023/11/16 18:55* Description: 默认情况下栈的大小*/
public class StackMainApp {private int stackLength 1;public void stackLeak() {stackLength;stackLeak();}public static void main(String[] args) {StackMainApp stackMainApp new StackMainApp();try {stackMainApp.stackLeak();} catch (Throwable e) {System.out.println(stackLength stackMainApp.stackLength);e.printStackTrace();}}}
7.3、修改栈的大小
-Xss128k