• 搬砖的孟达
    2018-12-09
    看不太懂。哈哈哈...可能基础还不到这个水平吧,多看多思考吧。
    
     8
  • 夜行观星
    2019-11-19
    看懂这篇文章,已经是一年之后,时间真快
     2
     5
  • ext4
    2018-08-31
    除了你上面提到的内存依赖,我看到C2的ideal graph里面还有一种依赖叫做I/O dependency,这个在Graal的graph里似乎也没有了。可以解释一下C2的这个I/O dependency是做什么的,以及Graal是如何替代这种依赖的表示的么?

    作者回复: 首先这些dependency都是为了scheduling服务的,也就是把图序列化为指令序列,图节点中的相互依赖会让它们拥有先后关系。

    个人理解哈,原本的IO dependency就是IO顺序,Cliff Click大神的论文中说的是没有内存映射的IO访问。现在C2应该用来泛指非内存访问的JVM状态。

    Graal里这种额外的依赖关系都是用控制流先后顺序来表达的。

    
     3
  • Ken张云忠
    2020-01-17
    郑老师,本节中第一张IR图和下面的Control Flow图是使用http://ssw.jku.at/General/Staff/TW/igv.html的IdealGraphVisualizer查看的吧.
    这个工具使用jdk7启动起来后,但是在执行时必须要使用debug版的jdk7才能执行参数-XX:PrintIdealGraphLevel=2 -XX:PrintIdealGraphFile=ideal.xml,一直困扰在获取不到debug版的jdk7,下载openjdk7自己编译过程中遇到了太多问题,尤其是build-debug/hotspot中太多代码编译不过去的问题.
    老师是怎么样一步步得到debug版的jdk7的?
    展开

    作者回复: 那个比较老,你可以去下载GraalVM,里面有附带igv的。OpenJDK 7编译是比较难,很多奇奇怪怪的依赖问题,8之后就好多了

    
     1
  • 鱼肚
    2019-09-03
    原本里的 IGV 用不了,用这个 https://github.com/oracle/graal/releases/tag/idealgraphvisualizer-543
    
     1
  • neohope
    2019-09-02
    想问一下老师,idealgraphvisualizer中,有没有办法看到全局的IR图?开启后,好像有很多次优化,每次都只能看到一部分哦。

    此外:
    1、官网下载的idealgraphvisualizer是2011年版本,没法用,要用直接在github上下载的版本
    2、idealgraphvisualizer当前版本,好像只支持JDK1.8?
    3、从graal官网下载的版本只有JDK1.8,下载了也没有用。直接下载Oracle JDK11就可以了
    4、最后例子的Demo,JDK11参数要调整一下:
    java -XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler -XX:CompileCommand=dontinline,"CompilationTest.hash()" -Dgraal.Dump=:3 -Dgraal.OptDeoptimizationGrouping=false CompilationTest
    5、前面两个例子,需要用Debug版本的JDK。最后一个不需要。
    展开
     1
     1
  • code-artist
    2018-09-03
    IR图有点看不懂。基本块是根据什么原则划分的? 有些块有start,begin, end等等,有些块却没有? 为什么GVN代码中,都是判断a,b是否大于0,图中B3来了一个Merge节点?

    作者回复: 先说一下,这个是Graal的IR。

    基本块的划分规则是根据其定义来的,即最长的,顺序执行的节点集。

    start begin end是为了标注基本块的起始和结尾,便于优化,没有其他实际意义。

    merge节点可以看成控制流交汇的节点,在Graal里就是用来挂phi节点的。最后有两个return而没有merge,实际上是另外一个优化code duplicati,将原本的merge优化掉,生成两条独立程序路径。在这两条路径中,b的值是唯一的,而不是一个phi方法。

    
     1
  • the geek
    2020-02-05
    这篇文章最好还是看懂,后面的方法内联章节会经常出现IR图,我一开始也是看了个大概,看了方法内联后,回来静下心一看,还是比较简单的
    主要就是将方法的执行流程转换为IR图。
    IR图中一些符号解释(以下是个人简单理解,仅供参考):
    1. 常量值:C(0)、C(1)。就是常量值1、2 (类型是i32)
    2. 参数值P(0)、P(1)。就是方法参数0和方法参数1=>上面int a,int b
    3.Phi(IR节点1,IR节点2,内存类型)。(i32可能是说int 32位 ,方便分配内存吧?个人猜测老师指正)
    展开
    
    
  • hasWhere
    2020-02-03
    先mark下,看的迷糊
    
    
  • Jerry银银
    2019-12-25
    学虚拟机到今天,才慢慢明白,为什么R大在博客里提到很大一部分是学习编译原理的知识。

    郑博,好想,你你能写篇文章,如何才能做到【稍微精通】虚拟机?
    
    
  • 樱小路依然
    2019-08-22
    呃,感觉有点不懂、
    1.老师先说前端编译器将Java代码优化为IR
    2.Java编译器将源代码编译为Java字节码
    3.即时编译器将Java字节码当做一种IR
    4.Java字节码并不适合作为可供优化的IR,因为其为 SSA IR,采用静态单赋值的方式

    然而,后面老师又说:总之,即时编译器会将Java字节码转化为SSA IR。

    请问到底是 Java编译器将Java源代码编译、转化为 SSA IR
    还是即时编译器将Java字节码转换为SSA IR?
    展开
    
    
  • Jthan
    2019-08-22
    好靠前
    
    
  • 草戊
    2019-05-21
    有好多编译原理的东西
    
    
  • likun
    2018-10-22
    你好 我这边找不到bebug版本的jdk10,好像无法查看ir图

    作者回复: 导出Graal IR不用debug版本的JDK

    
    
我们在线,来聊聊吧