作者回复: 我觉得总结得很到位了。
这篇文章主要就是在介绍profile-guided optimization。介绍了两个优化的案例,以及过于乐观的优化出错时怎么补救。
作者回复: 在同一方法内,所有的字节码都被编译了。机器码与字节码的切换在方法调用(或者循环回边,对应OSR编译)。
对于已经在堆上的对象,字节码和机器码所使用对象布局是一致的,解释执行器从哪个偏移量访问某字段,机器码也会从这个偏移量访问字段。(对于标量替换的新建对象,机器码会在去优化时重建对象。)
JVM里的Runtime是共享的,因此像new对象,实际上都会走到同一个底层方法中。GC是独立的组件,跟字节码机器码没关系,所有new对象都会被JVM runtime追踪。
作者回复: JMM的工作内存是个虚拟概念,映射到我们的体系架构就是CPU缓存。
要追踪缓存更新事件的话,估计得看perf,VTune等支持CPU performance counter的工具啦
作者回复: 马上会专门开一篇介绍。可以关注一下OpenJDK的Panama项目,会提供vector API
作者回复: Java 10自带Graal编译器。Oracle OTN下的GraalVM也是编译好的版本,无需另外编译。
如果想要改Graal源代码后编译,可以参考github.com/oracle/graal/tree/master/compiler/README.md
作者回复: 调优的情况不多的,能做的即时编译器都帮你做了