• godtrue
    2018-09-02
    这节是即时编译器的有关优化、去优化、以及何时优化和为什么去优化的内容。可能比较底层,看不见摸不着,一句两句也说不清楚,所以,有点晦涩。
    不过经过反复看有点感觉了,小结如下:
    1:profile-是收集运行时状态信息,用于编译器优化,当然,收集信息也是耗性能的,所以,也是有前提条件的,当存在优化的可能性时才去费劲吧啦的收集相关信息

    2:本节介绍的两种优化的方式思路,都是采用取巧少做事情的方式实现,是建立在假设有些事情不需要做的前提下采用的优化措施

    3:如果假设失败,那就去优化呗!还用原来的方式老老实实的解释执行就完了

    上述思路是理解了,不过具体实现还是蒙蒙的,应该是水平有限理解不到位吧!整体还是有收获的,所以,非常感谢!
    展开

    作者回复: 我觉得总结得很到位了。

    这篇文章主要就是在介绍profile-guided optimization。介绍了两个优化的案例,以及过于乐观的优化出错时怎么补救。

    
     11
  • xiaobang
    2018-10-10
    想问下生成的机器码如何和其它未编译的字节码交互?比如相互调用,访问对象内的字段,new对象和对应的gc

    作者回复: 在同一方法内,所有的字节码都被编译了。机器码与字节码的切换在方法调用(或者循环回边,对应OSR编译)。

    对于已经在堆上的对象,字节码和机器码所使用对象布局是一致的,解释执行器从哪个偏移量访问某字段,机器码也会从这个偏移量访问字段。(对于标量替换的新建对象,机器码会在去优化时重建对象。)

    JVM里的Runtime是共享的,因此像new对象,实际上都会走到同一个底层方法中。GC是独立的组件,跟字节码机器码没关系,所有new对象都会被JVM runtime追踪。

    
     3
  • 徐志毅
    2018-08-29
    雨迪老师,请问有什么方式可以跟踪JMM里主内存与工作内存的交互,如什么时候加载到工作内存、什么时候同步到主内存~ 盼回复,谢谢

    作者回复: JMM的工作内存是个虚拟概念,映射到我们的体系架构就是CPU缓存。

    要追踪缓存更新事件的话,估计得看perf,VTune等支持CPU performance counter的工具啦

     1
     1
  • jimi
    2018-08-29
    那么有什么规则,可以让代码尽可能被优化?
     1
     1
  • 饭粒
    2019-12-23
    给我的感觉是 JVM 基于代码执行数据的收集分析(有点像是用概率统计、机器学习来分析收集的代码执行数据 profiling),在不改变代码最终执行逻辑的正确性下,优化代码的执行。无法优化的情况下再回退优化。
    
    
  • 随心而至
    2019-10-18
    Windows需要下载对应的dll文件,Google了对应的下载地址
    https://github.com/LiuDui/JavaTools
    
    
  • 随心而至
    2019-10-18
    这两节都是讲JVM想做一些假设,来提高程序的运行效率(优化);如果假设错了就重新来过(去优化,退化为解释执行)。
    这里JVM尝试做的事情,感觉和底层CPU想做的分支预测如出一辙。
    具体可参考:https://time.geekbang.org/column/article/102166
    
    
  • 樱小路依然
    2019-08-21
    类型profile里,老师的第一个图感觉有点怪怪的,按文字来描述的话,个人理解为:
    - 原来:
        - 测试该类是否与Exception类型一致
        - 测试该类父类是否与Exception类型一致
        - 测试该类祖先类是否与Exception类型一致
        - 测试该类是否有直接实现或者间接实现的接口与Exception类型一致
        - 都不一致,return ((Integer)in).value;

    然后优化为了,直接判断类型是否为 Integer,如果是,则直接返回((Integer)in).value。不经过中间的父类、祖先类、直接间接实现的接口类型判断等
    展开
    
    
  • 乔毅
    2018-09-03
    请教下老师,JIT利用SIMD进行优化的实现程度?实践中看到大多是仅仅做了循环展开。换言之,有没有什么最佳实践,可以写出JIT SIMD优化友好的代码。

    作者回复: 马上会专门开一篇介绍。可以关注一下OpenJDK的Panama项目,会提供vector API

    
    
  • 茶底
    2018-08-30
    大佬我已经把graal拿到手了。目前用了下gu下语言挺好使的。但是这个怎么编译啊。。。

    作者回复: Java 10自带Graal编译器。Oracle OTN下的GraalVM也是编译好的版本,无需另外编译。

    如果想要改Graal源代码后编译,可以参考github.com/oracle/graal/tree/master/compiler/README.md

    
    
  • 三木子
    2018-08-30
    感觉好难,我想问下在现实情况下通过编译器调优的情况多吗?

    作者回复: 调优的情况不多的,能做的即时编译器都帮你做了

    
    
我们在线,来聊聊吧