2.Jvm 虚拟机栈和栈帧】的更多相关文章

1.参数 -Xss 指定线程最大的栈空间,整个参数也直接决定了函数可调用的最大深度 2.测试代码 private static int count; public static void addCount() { count++; addCount(); } public static void main(String[] args) { //配置参数 //-Xss5m try { addCount(); } catch (Throwable e) { System.out.println("调…
Jvm 虚拟机栈和栈帧 1.栈帧(frames) 官网描述 A frame is used to store data and partial results, as well as to perform dynamic linking, return values for methods, and dispatch exceptions. A new frame is created each time a method is invoked. A frame is destroyed whe…
Java虚拟机运行时栈帧结构(周志明书上P237页) 栈帧是什么? 栈帧是一种数据结构,用于虚拟机进行方法的调用和执行. 栈帧是虚拟机栈的栈元素,也就是入栈和出栈的一个单元. 2018.1.2更新(在网上看到一个更好的解释): 栈帧(Frame)是用来存储数据和部分过程结果的数据结构,同时也被用来处理动态链接 (Dynamic Linking).方法返回值和异常分派(Dispatch Exception). 栈帧在什么地方? 内存 -> 运行时数据区 -> 某个线程对应的虚拟机栈 ->…
jvm虚拟机栈的作用 jvm虚拟机栈栈帧的组成 jvm虚拟机栈,也叫java栈,它由一个个的栈帧组成,而栈帖由以下几个部分组成 局部变量表-存储方法参数,内部使用的变量 操作数栈-在变量进行存储时,需要进行入栈和出栈 动态连接-引用类型的指针 方法出口-方法的返回 一段原程序代码 package com.lind.basic; public class Demo1 { static int hello() { int a = 1; int b = 2; int c = a + b; return…
堆 Java堆是和Java应用程序关系最密切的内存空间,几乎所有的对象都放在其中,并且Java堆完全是自动化管理,通过垃圾收集机制,垃圾对象会自动清理,不需自己去释放. 根据垃圾回收机制的不同,Java堆有可能拥有不同的结构,最为常见的就是将整个Java堆分为新生代(Young Gen)和老年代(Tenured Gen).其中新生代存放新生的对象或者年龄不大的对象,老年代则存放老年对象. 新生代分为edn区,s0区,s1区,s0和s1也被称为from和to区域,他们是两块大小相等,并且可以互相转…
栈: 1.又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把 另一端称为栈底.其特性是先进后出. 2.栈是线程私有的,生命周期跟线程相同,当创建一个线程时,同时会创建一个栈,栈的大小和深度都是固定的. 3.方法参数列表中的变量,方法体中的基本数据类型的变量和引用数据类型的引用都存放在栈中,成员变量和对象本身不存放在栈中.运行时,成员函数的局部变量引用也存放在栈中. 4.栈的变量随着变量作用域的结束而释放,不需要jvm垃圾回收机制回收. 5…
运行时栈帧结构 栈帧(Stack Frame) 是用于虚拟机执行时方法调用和方法执行时的数据结构,它是虚拟栈数据区的组成元素.每一个方法从调用到方法返回都对应着一个栈帧入栈出栈的过程. 每一个栈帧在编译程序代码的时候所需要多大的局部变量表,多深的操作数栈都已经决定了,并且写入到方发表的 Code 属性之中,一次一个栈帧需要多少内存,不会受到程序运行期变量数据的影响,仅仅取决于具体的虚拟机实现. 一个线程中方法调用可能很长,很多方法都处于执行状态.对于执行引擎来说,只有处于栈顶的栈帧才是有效的,称…
Java 堆 Java堆是和Java应用程序关系最密切的内存空间,几乎所有的对象都放在其中,并且Java堆完全是自动化管理,通过垃圾收集机制,垃圾对象会自动清理,不需自己去释放. 根据垃圾回收机制的不同,Java堆有可能拥有不同的结构,最为常见的就是将整个Java堆分为新生代(Young Gen)和老年代(Tenured Gen).其中新生代存放新生的对象或者年龄不大的对象,老年代则存放老年对象. 新生代分为edn区,s0区,s1区,s0和s1也被称为from和to区域,他们是两块大小相等,并且…
虚拟机栈: 栈元素是栈帧.方法调用,栈帧入栈,反之出栈. 栈帧:一个方法的运行空间. 1.局部变量表:方法定义的局部变量.方法的参数存在该表. 实例方法中有个隐含参数“this”,所以实例方法可以访问该类的实例变量和其他实例方法. 局部变量表中变量的存放顺序:this(如果是实例方法)=>参数(如果有)=> 定义的局部变量(如果有) slot是局部变量表中的空间单元,虚拟机规范规定: 1.32位之内的数据,用一个slot来存放,如int.short.float等: 2.64位的数据用连续两个s…
栈帧内的数据结构 局部变量表(Local Variables):记录非静态方法的this指针.方法参数.局部变量 操作数栈(Operand Stack):用于计算的栈结构 动态链接(Dynamic Link):指向运行时常量池的方法引用 方法返回地址(Return Address):方法正常退出或异常退出的定义,以及方法间返回值传递(注意: java中的方法除了正常返回还可能因为异常退出,所以方法返回地址不一定就是方法退出的地址) 附加信息 局部变量表 Each frame contains a…