• 《631962 揭秘Java虚拟机-JVM设计原理与实现.pdf【第7章】》 ——Java栈桢


     

     

     

     

     

     

     

    除入参之外。。。

     

     

    callee 复用 caller 的入参,所以先把 return address 挪走(到a寄存器),然后往上跳到第一个参数的位置

    一定要注意栈是开口向下(从高地址到低地址)

     初始化,用  push 而不用 sub

     

     

     

     

     

    2.操作数栈

    操作数栈(Operand Stack)也常称为操作栈,它是一个后入先出栈(LIFO)。同局部变量表一样,操作数栈的最大深度也在编译的时候写入到方法的Code属性的max_stacks数据项中。

    操作数栈的每一个元素可以是任意Java数据类型,32位的数据类型占一个栈容量,64位的数据类型占2个栈容量,且在方法执行的任意时刻,操作数栈的深度都不会超过max_stacks中设置的最大值。

    当一个方法刚刚开始执行时,其操作数栈是空的,随着方法执行和字节码指令的执行,会从局部变量表或对象实例的字段中复制常量或变量写入到操作数栈,再随着计算的进行将栈中元素出栈到局部变量表或者返回给方法调用者,也就是出栈/入栈操作。一个完整的方法执行期间往往包含多个这样出栈/入栈的过程。

     https://zhuanlan.zhihu.com/p/45354152

     

     

     

     

  • 相关阅读:
    【java】之位运算^,&,<<,>>,<<<,>>>总结
    【java】之算法复杂度o(1), o(n), o(logn), o(nlogn)
    【springboot】之自动配置原理
    【git】之使用shell脚本提交代码
    【linux】之日志查看
    【mysql】字段类型和长度的解释
    老生常谈:++a与a--区别
    关于tr:hover变色的问题
    服务器端渲染VS浏览器端渲染
    HTTP状态码302、303、307区别
  • 原文地址:https://www.cnblogs.com/cx2016/p/13137691.html
Copyright © 2020-2023  润新知