下面的内容全部来自网络,基本无原创。只是学习笔记而已。
3.3.1.3 帧数据区
帧数据区除了局部变量区和操作数栈外,Java栈帧还需要一些数据来支持常量池解析、正常方法返回以及异常派发机制。
A这些数据都保存在Java栈帧 的帧数据区中。当JVM执行到需要常量池数据的指令时,它都会通过帧数据区中指向常量池的指针来访问它。
jvm中的许多指令都涉及到常量池的数据。一些指令仅仅是取出常量池中的数据并压入操作数堆栈中。一些指令使用常量池中的数据来指示需要实例化的类或数组,需要访问的域,或需要激活的方法。还有一些指令来判断某个对象是否是常量池指定的某个类或接口的子孙实例。
每当jvm要执行需要常量区数据的指令,它都会通过帧数据区中指向常量区的指针来访问常量区。(常量区中对类型,域和方法的引用在开始时都是符号。如果当指令执行的时候仍然是符号,jvm就会进行解析。)
B 除了处理常量池解析外,帧里的数据还要处理Java方法的正常结束和异常终止。如果是通过return正常结束,则当前栈帧从Java栈中弹出,恢 复发起调用的方法的栈。如果方法又返回值,JVM会把返回值压入到发起调用方法的操作数栈。
C为了处理Java方法中的异常情况,帧数据区还必须保存一个对此方法异常引用表的引用。当异常抛出时,JVM给catch块中的代码。如果没发现, 方法立即终止,然后JVM用帧区数据的信息恢复发起调用的方法的帧。然后再发起调用方法的上下文重新抛出同样的异常。
3.3.1.4 栈的整个结构
在前面就描述过:栈是由栈帧组成,每当线程调用一个Java方法时,JVM就会在该线程对应的栈中压入一个帧,而帧是由局部变量区、操作数栈和帧数 据区组成。那在一个代码块中,栈到底是什么形式呢?
上面所给的图,只想说明两件事情,我们也可用此来理解Java中的栈:
1、只有在调用一个方法时,才为当前栈分配一个帧,然后将该帧压入栈。
2、帧中存储了对应方法的局部数据,方法执行完,对应的帧则从栈中弹出,并把返回结果存储在调用方法的帧的操作数栈中。
- 大小: 806 KB
分享到:
相关推荐
主要是JVM内存分配及简单的JVM性能调优
关于java的内存分配问题,jvm的运行原理相关资料总结
JVM初始分配的内存.doc JVM初始分配的内存.doc
个人整理 jvm相关知识 包括内存分配机制 垃圾回收机制 垃圾收集器相关 及 垃圾收集算法
NULL 博文链接:https://younglibin.iteye.com/blog/1959816
1.jvm内存结构及功能概述 2.Jvm Heap 内存结构 3.Jvm 的内存分配
23丨如何优化JVM内存分配?.html
JVM内存设置方法 JVM(Java Virtual Machine)是 Java 程序的运行环境,为了提高 Java 程序的性能,需要合理地设置 JVM 的内存分配。下面将详细介绍 JVM 内存设置的方法。 一、 JVM 内存设置参数 JVM 内存设置...
1.1 对象优先在Eden区分配 1.2 大对象直接进入老年代 1.3 长期存活的对象将进入老年代
Jvm对象内存分配理解
详细介绍了JVM 内存管理相关知识 内存空间( VM运行时数据区域) ◦ 内存结构 ◦ 内存空间 内存分配 内存回收(GC) 内存分析工具
JVM初探- 内存分配、GC原理与垃圾收集器,从从提上讲解了jvm中GC的原理、基本的算法和针对不同内存区使用的算法,同时,详细的讲解了当前主要使用的垃圾收集器
JVM内存段分配,Java垃圾回收调优,Heap设定
1、JVM 内存分配图解的 Visio 工程图。 2、直接下载使用、可自行调整和修改
NULL 博文链接:https://bxf12315.iteye.com/blog/1575773
JVM垃圾回收器和内存分配策略
jmap -heap pid可以查看应用程序堆的信息jstat可以打印元空间信息MC :分配到元空间大小MU:已使用的元空间大小 元空间是可以自己扩容的元空间: