读书笔记: 虚拟机

https://book.douban.com/people/fleure/annotation/3611865/

栈上替换

  • 栈上替换(On Stack Replace): 当执行内联(或者任何其它优化)时,将最近优化的代码插入到程序流中的一般做法是在下次调用某方法时进行优化。不过,这种做法要等到下次调用这个方法时才有好处。极端的情况发生在程序由一个含优化代码的单循环所支配,这个循环被执行数百万次。在这种情况下,可能再也不会调用这个优化的方法,因此如果想要得到任何好处,就必须早点插入优化的代码。

  • 在许多情况下,栈上替换的稳态性能收益是相对小的。

多版本和专门化

这一节译得不好,基本靠猜。

<原文开始>守护(在图中用斜体字显示)检查A[i]看其是否为零。</原文结束> "守护" 还出现了两三次,瞅了它三分钟想到原文一定是 "guard"。 <原文开始>前述的虚拟方法调用的内联方法本质上是一种多版本形式。多版本有两种(或者多种)代码版本,并且一个版本的选择取决于运行时信息,如数据的值或类型信息。对于内联的方法,一个版本是被内联的方法代码,另一个版本是一条invokevirtual指令,而守护选择其中一个版本。</原文结束> 开头还算讲得明白,看到最后一句就完全摸不着头脑了。 大家觉得 "guard" 怎样译比较好?