Java 方法调用:栈帧与堆

跟随示例代码入栈、引用传参、修改字段、出栈;静态引用仍可保活。。

run入栈后,a保存new Box的引用值;change的参数b复制此值,所以修改b.value会改变同一个对象。操作数栈用于计算,局部变量表存引用;两个方法返回后栈帧移除,但Box.saved仍指向实例。本例展示逻辑分配,JIT可优化掉真实分配。

主要特点

  • HotSpot教学逻辑图;区域不是精确物理地址。方法区是规范概念,元空间只存类元数据等;静态字段随Class镜像在堆中。JIT逃逸分析可能消除分配;本例按逻辑对象说明。解析可延迟,不强制发生在初始化前。

如何使用Java 方法调用:栈帧与堆

  1. 当前是就绪画面。开始演示会按当前参数执行一次操作;回放准备过程请从头播放。
  2. 每次操作独立一轮。从头播放重播本轮,当前继续从所选步骤接着播;步骤菜单与时间轴可定位,历史菜单可回看上一轮。
  3. 方向键 ← → 可单步,空格键播放或暂停。

数据与隐私

所有计算都在你的浏览器里完成,不连接任何数据库,也不会把你输入的内容上传到任何地方。

相关工具

  • 计算机原理可视化 - 原「数据结构可视化」。36个可交互场景:数据结构、Java集合与JVM/GC/线程池、MySQL索引/MVCC/执行恢复、TCP/UDP、分布式事务;逐步字幕、慢速播放和面试讲解。

查看像素鸭AI全部在线工具

可对照的关键步骤(随参数进入不同分支)

class Box {
  int value;
  static Box saved;
  static void run() {
    Box a = new Box();
    saved = a;
    change(a);
  }
  static void change(Box b) { b.value++; }
}

官方实现与参考

正在把工具准备好

马上就好,请稍等一下…