JVM04_虚拟机栈概述、局部变量表、操作数栈、动态链接、方法的返回地址、附加信息(二)

简介: ③. 操作数栈(operand stack)

③. 操作数栈(operand stack)


①. 我们说Java虚拟机的解释引擎是基于栈的执行引擎,其中的栈指的就是操作数栈。


②. 每一个独立的栈帧中除了包含局部变量表以外,还包含了一个后进先出的操作数栈,也可以称之为表达式栈


③. 操作数栈,在方法执行过程中,根据字节码指令,往栈中写入数据或提取数据,即入栈或出栈


④. 每一个操作数栈都会拥有一个明确的栈深度用于存储数值,其所需的最大深度在编译期就定义好了,保存在方法的Code属性中,为max_stack的值


⑤. 栈中的任何一个元素都是可以任意的Java数据类型

32bit的类型占用一个栈单位深度

64bit的类型占用两个栈单位深度


⑥. 如果被调用的方法带有返回值的话,其返回值将会被压入当前栈帧的操作数栈中,并更新PC寄存器中下一条需要执行的字节码指令


⑦. 操作数栈,主要用于保存计算机过程的中间结果,同时作为计算过程中变量临时的存储空间 掌握


⑧. 操作数栈的具体说明[一]

这里的代码中操作数栈的长度最大是2,在iload_1、iload_2的时候


  public void testAddOperation(){
      byte i = 15;
      int j = 8;
      int k = i + j;
  }


解释:


微信图片_20220106134110.png


微信图片_20220106134117.png


微信图片_20220106134144.png

微信图片_20220106134148.png

微信图片_20220106134154.png

微信图片_20220106134321.png

微信图片_20220106134339.png

微信图片_20220106134217.png微信图片_20220106134222.png


  • ⑧. 操作数栈的具体说明[二]


  1. 局部变量有多少个?


  1. 操作数栈的最大深度是多少?


微信图片_20220106134440.png


public class OperandStackTest {
    public void testAddOperation(){
        //byte、short、char、boolean:都以int型保存
        byte i=15;
        short j=8;
        int k=i+j;
        long m=12L;
        int n=800;
        //存在宽化类型转换
        m=m*n;
    }
}


解释


微信图片_20220106134508.png


⑨. 操作数栈的具体说明[三]


操作书栈的最大深度是2,这个2是在(new #2 、dup的时候)


public class OperandStackTest {
    public static void main(String[] args) {
        OperandStackTest test=new OperandStackTest();
        int num=10;
        test.testAddOperation();
    }
    public void testAddOperation(){
        //byte、short、char、boolean:都以int型保存
        byte i=15;
        short j=8;
        int k=i+j;
        long m=12L;
        int n=800;
        //存在宽化类型转换
        m=m*n;
    }
 0 new #2 <com/xiaozhi/jvm/OperandStackTest> 将new的对象放入操作数栈中
 3 dup 复制一份出来,在操作数栈中,这时操作数栈的长度为2
 下面用了dup出来的对象
 4 invokespecial #3 <com/xiaozhi/jvm/OperandStackTest.<init>>
 7 astore_1 将new出来的放入了局部变量表为1的位置,0的位置放的是arg
 8 bipush 10 将10放入操作数栈
10 istore_2  将操作数栈中的10放入局部变量表为2的位置
11 aload_1   将巨变变量表1的位置放入操作数栈中
下面调用了方法,也就意味着操作数栈1的位置出栈了
12 invokevirtual #4 <com/xiaozhi/jvm/OperandStackTest.testAddOperation>
15 return


微信图片_20220106134552.png


⑩. 何为栈顶缓存技术? 了解


前面提过,基于栈式架构的虚拟机所使用的零地址指令更加紧凑,但完成一项操作的时候必然需要使用更多的入栈和出栈指令,这同时也就意味着将需要更多的指令分派(instruction dispatch)次数和内存读/写次数。


由于操作数是存储在内存中的,因此频繁地执行内存读/写操作必然会影响执行速度。为了解决这个题,HotSpot JVM的设计者们提出了栈顶缓存(ToS,Top-of-Stack Cashing)技术,将栈顶元素全部缓存在物理CPU的寄存器中,以此降低对内存的读/写次数,提升执行引擎的执行效率


相关文章
|
2月前
|
监控 算法 Java
Java虚拟机(JVM)的垃圾回收机制深度解析####
本文深入探讨了Java虚拟机(JVM)的垃圾回收机制,旨在揭示其背后的工作原理与优化策略。我们将从垃圾回收的基本概念入手,逐步剖析标记-清除、复制算法、标记-整理等主流垃圾回收算法的原理与实现细节。通过对比不同算法的优缺点及适用场景,为开发者提供优化Java应用性能与内存管理的实践指南。 ####
|
1月前
|
监控 算法 Java
Java虚拟机(JVM)垃圾回收机制深度剖析与优化策略####
本文作为一篇技术性文章,深入探讨了Java虚拟机(JVM)中垃圾回收的工作原理,详细分析了标记-清除、复制算法、标记-压缩及分代收集等主流垃圾回收算法的特点和适用场景。通过实际案例,展示了不同GC(Garbage Collector)算法在应用中的表现差异,并针对大型应用提出了一系列优化策略,包括选择合适的GC算法、调整堆内存大小、并行与并发GC调优等,旨在帮助开发者更好地理解和优化Java应用的性能。 ####
41 0
|
24天前
|
存储 Java 开发者
浅析JVM方法解析、创建和链接
上一篇文章《你知道Java类是如何被加载的吗?》分析了HotSpot是如何加载Java类的,本文再来分析下Hotspot又是如何解析、创建和链接类方法的。
|
1月前
|
存储 监控 算法
深入探索Java虚拟机(JVM)的内存管理机制
本文旨在为读者提供对Java虚拟机(JVM)内存管理机制的深入理解。通过详细解析JVM的内存结构、垃圾回收算法以及性能优化策略,本文不仅揭示了Java程序高效运行背后的原理,还为开发者提供了优化应用程序性能的实用技巧。不同于常规摘要仅概述文章大意,本文摘要将简要介绍JVM内存管理的关键点,为读者提供一个清晰的学习路线图。
|
1月前
|
存储 监控 算法
Java虚拟机(JVM)垃圾回收机制深度解析与优化策略####
本文旨在深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法及参数调优方法。通过剖析垃圾回收的生命周期、内存区域划分以及GC日志分析,为开发者提供一套实用的JVM垃圾回收优化指南,助力提升Java应用的性能与稳定性。 ####
|
2月前
|
机器学习/深度学习 监控 算法
Java虚拟机(JVM)的垃圾回收机制深度剖析####
本文深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法、性能调优策略及未来趋势。通过实例解析,为开发者提供优化Java应用性能的思路与方法。 ####
54 1
|
2月前
|
监控 Java 开发者
Java虚拟机(JVM)深度优化指南####
本文深入探讨了Java虚拟机(JVM)的工作原理及其性能优化策略,旨在帮助开发者通过理解JVM的内部机制来提升Java应用的运行效率。不同于传统的技术教程,本文采用案例分析与实战技巧相结合的方式,为读者揭示JVM调优的艺术。 ####
58 8
|
2月前
|
监控 Java Spring
JVM如何监控某个方法的入参和相应结果?
JVM如何监控某个方法的入参和相应结果?
39 0
|
3月前
|
存储 算法 Java
Java虚拟机(JVM)的内存管理与性能优化
本文深入探讨了Java虚拟机(JVM)的内存管理机制,包括堆、栈、方法区等关键区域的功能与作用。通过分析垃圾回收算法和调优策略,旨在帮助开发者理解如何有效提升Java应用的性能。文章采用通俗易懂的语言,结合具体实例,使读者能够轻松掌握复杂的内存管理概念,并应用于实际开发中。
|
2月前
|
监控 算法 Java
深入理解Java虚拟机(JVM)的垃圾回收机制
【10月更文挑战第21天】 本文将带你深入了解Java虚拟机(JVM)的垃圾回收机制,包括它的工作原理、常见的垃圾收集算法以及如何优化JVM垃圾回收性能。通过本文,你将对JVM垃圾回收有一个全新的认识,并学会如何在实际开发中进行有效的调优。
60 0