`
bxf12315
  • 浏览: 27326 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Jvm内存分配(6)

    博客分类:
  • java
 
阅读更多

下面的内容全部来自网络,基本无原创。只是学习笔记而已。

3.3.1.3 帧数据区

 帧数据区除了局部变量区和操作数栈外,Java栈帧还需要一些数据来支持常量池解析、正常方法返回以及异常派发机制。

A这些数据都保存在Java栈帧 的帧数据区中。当JVM执行到需要常量池数据的指令时,它都会通过帧数据区中指向常量池的指针来访问它。

jvm中的许多指令都涉及到常量池的数据。一些指令仅仅是取出常量池中的数据并压入操作数堆栈中。一些指令使用常量池中的数据来指示需要实例化的类或数组,需要访问的域,或需要激活的方法。还有一些指令来判断某个对象是否是常量池指定的某个类或接口的子孙实例。

每当jvm要执行需要常量区数据的指令,它都会通过帧数据区中指向常量区的指针来访问常量区。(常量区中对类型,域和方法的引用在开始时都是符号。如果当指令执行的时候仍然是符号,jvm就会进行解析。)

B 除了处理常量池解析外,帧里的数据还要处理Java方法的正常结束和异常终止。如果是通过return正常结束,则当前栈帧从Java栈中弹出,恢 复发起调用的方法的栈。如果方法又返回值,JVM会把返回值压入到发起调用方法的操作数栈。

C为了处理Java方法中的异常情况,帧数据区还必须保存一个对此方法异常引用表的引用。当异常抛出时,JVMcatch块中的代码。如果没发现, 方法立即终止,然后JVM用帧区数据的信息恢复发起调用的方法的帧。然后再发起调用方法的上下文重新抛出同样的异常。

3.3.1.4 栈的整个结构

 

在前面就描述过:栈是由栈帧组成,每当线程调用一个Java方法时,JVM就会在该线程对应的栈中压入一个帧,而帧是由局部变量区、操作数栈和帧数 据区组成。那在一个代码块中,栈到底是什么形式呢?



 上面所给的图,只想说明两件事情,我们也可用此来理解Java中的栈:

1、只有在调用一个方法时,才为当前栈分配一个帧,然后将该帧压入栈。

2、帧中存储了对应方法的局部数据,方法执行完,对应的帧则从栈中弹出,并把返回结果存储在调用方法的帧的操作数栈中。

 

 

  • 大小: 806 KB
分享到:
评论

相关推荐

    JVM内存空间分配笔记

    ### JVM内存空间分配详解 #### 一、JVM内存模型概览 ...综上所述,理解JVM内存分配机制对于Java开发者来说至关重要,这不仅有助于编写高效、稳定的代码,还能在遇到性能瓶颈时快速定位问题并进行优化。

    java中jvm内存分配相关资料总结整理

    本资料总结主要关注JVM内存分配及其运行原理,这对于理解和优化Java应用程序的性能至关重要。 1. **JVM内存结构** JVM内存分为几个关键区域:方法区(Method Area)、堆(Heap)、栈(Stack)、程序计数器(PC ...

    JVM内存分配与垃圾回收详解

    JVM 内存分配与垃圾回收详解 Java 虚拟机(JVM)是 Java 语言的 runtime 环境,它提供了一个平台独立的方式来执行 Java 字节码。JVM 内存分配与垃圾回收是 JVM 中两个非常重要的概念,本文将对 JVM 内存分配与垃圾...

    java -jvm 内存分配和jvm调优

    总结,Java JVM内存分配和调优是一项复杂的任务,需要结合实际应用的需求和性能指标来调整。通过理解JVM内存模型,选择合适的垃圾收集器和设置合理的内存参数,可以有效提升Java应用的性能和稳定性。在实践中,不断...

    JVM内存溢出问题解析

    堆的优势是可以动态分配内存大小,生存期也不必事先告诉编译器,但缺点是要在运行时动态分配内存,存取速度较慢。 JVM 如何设置虚拟内存?在 JVM 中,如果 98%的时间是用于 GC 且可用的 Heap size 不足 2%的时候...

    03-VIP-JVM内存分配机制与垃圾回收算法1

    4. **JVM内存分配示例分析** 在提供的代码示例中,我们看到当分配给`allocation1`的大对象超过Eden区的容量时,JVM执行了Minor GC。初始时,Eden区被完全使用,而老年代未使用。当我们尝试为`allocation2`分配内存...

    jvm 内存分析文档

    JVM内存分配策略基于对象的生命周期,新生代采用复制算法,老年代采用标记-压缩或标记-整理算法。内存分配的策略会影响垃圾收集的效率和程序的响应速度。 ### GC(垃圾回收) 垃圾回收是JVM自动管理内存的关键特性...

    idea插件JVM内存工具JProfiler11

    1. **内存分配和泄漏检测**:JProfiler11能详细追踪对象的创建、存活和销毁过程,帮助识别内存泄漏。通过查看对象分配图表,可以发现哪些类或方法在消耗大量内存,从而定位潜在的问题。 2. **垃圾收集分析**:...

    Jvm内存分配(7)

    《Jvm内存分配(7)》这篇博文主要探讨的是Java虚拟机(JVM)中的内存管理,特别是关于内存分配的相关知识。在Java程序运行时,JVM会为不同部分的内存区域进行分配,以保证程序的正常执行。以下是对这一主题的详细...

    JVM内存参数详解以及配置调优

    在这个资源中,我们将详细讨论 JVM 内存参数的配置和调优,包括 JVM 的结构、内存管理、垃圾回收、堆和非堆内存、内存分配和限制等方面。 JVM 结构 JVM 的结构主要由六个部分组成:JVM API、JVM 内部组件、平台...

    JVM内存模型深度剖析与优化.pdf

    JVM内存优化的目的是尽可能让对象都在新生代里分配和回收,避免频繁对老年代进行垃圾回收。以下是一些JVM内存优化的技巧: 1. 设置适当的堆大小:根据实际项目情况,设置适当的堆大小可以避免频繁的垃圾回收。 2. ...

    java获得jvm内存大小

    通过动态地调整`-Xms`和`-Xmx`参数,可以在运行时根据实际需求优化内存分配,从而提高程序的性能和稳定性。此外,定期检查和分析`heapSize`、`heapMaxSize`和`heapFreeSize`等指标,可以帮助开发者及时发现潜在的...

    解析JVM内存结构和6大区域

    由于 JVM 栈是线程私有的,因此其在内存分配上非常高效,并且当线程运行完毕后,这些内存也就被自动回收。当 JVM 栈的空间不足时,会抛出 StackOverflowError 的错误,在 Sun JDK 中可以通过-Xss 来指定栈的大小。 ...

    mat(mac)---jvm内存分析工具

    总之,MAT作为一款强大的JVM内存分析工具,对于优化Java应用的内存使用,提升应用性能,尤其是对于Mac OS X平台的开发者来说,是不可或缺的利器。通过熟练掌握MAT的使用,开发者可以更有效地管理和优化应用程序的...

    Jvm对象内存分配理解

    Jvm 对象内存分配理解 Jvm 对象内存分配是 Java 虚拟机(Jvm)中的一种机制,用于在堆中分配对象的内存空间。该机制涉及到类加载检查、内存分配、对象初始化等多个步骤。 类加载检查 在 Jvm 对象内存分配中,首先...

    23丨如何优化JVM内存分配?.html

    23丨如何优化JVM内存分配?.html

    JVM初探- 内存分配、GC原理与垃圾收集器

    首先,JVM内存分配策略主要涉及对象如何在堆内存的不同区域进行分配。对象在新生代Eden区进行分配,这是内存分配最频繁的区域。为了减少内存分配时的线程同步问题,JVM引入了本地线程分配缓冲(TLAB),允许每个线程...

    JVM内存日志

    - 调整内存分配比例,比如新生代和老年代的比例。 - 使用合适的垃圾收集器,如CMS、G1或ZGC。 - 避免创建大量短生命周期的大对象,减少Full GC的发生。 - 定期分析内存日志,及时发现和解决问题。 总结,通过...

Global site tag (gtag.js) - Google Analytics