作者回复: 基于栈的计算模型确实是为了实现起来容易一些,但它并不高效,因为没有使用底层体系架构的寄存器。
在JVM中,只有解释器完整地模拟出该计算模型。即时编译器在解析字节码时会使用一个虚拟的栈计算模型,但是在接下来的编译优化,以及生成的机器码就不用了。
作者回复: 如果是虚拟机初始化局部变量,那么它需要掌握每个变量的生命周期,以便初始化共享同一下标的局部变量。实现起来比较费事。
另一方面,从代码规范来看,使用未经初始化的局部变量意义不明。
作者回复: Java字节码不会,但是底下的实现(比如解释执行器,即时编译器)是会的。
作者回复: 构造器是没有返回结果的,所以不用pop。如果不dup的话,就只有一个r0,在调用构造器时用掉了,程序就再没有对该新建对象的引用了。
作者回复: 多谢指出!
作者回复: 正常执行路径会有return,有返回值的是ireturn,areturn这些。异常执行路径会有athrow。你可以试试查看只有一句throw new Exception()的方法