• Len
    2018-10-12
    我们可不可以把 profile 和编译的机器码保存到磁盘,在代码和运行平台不变的情况下,下次启动(或部署多实例)的时候直接装载这部分数据?这算作是一种系统预热的可行性方案吗?

    作者回复: 赞想法!已经有这种做法,但同时需要承担profile不能反映当前执行状态的风险。可以了解一下Alibaba的JWarmup。

    
     7
  • 金龙
    2018-10-08
    GraalVM和JVM是什么关系?它在OpenJDK上是怎么运行的?求解惑

    作者回复: 你可以将GraalVM看成泛指带Graal编译器的虚拟机。

    在OpenJDK 10和11,可以直接UnlockExperimentalOptions UseJVMCICompiler开启。

    
     4
  • ZY
    2018-10-16
    GraalVM大概什么时候会发布release版本?

    作者回复: Soon :)

    如果只是用HotSpot中的Graal编译器,那已经挺成熟了,Twitter已经全面部署了。

    
     3
  • godtrue
    2018-10-14
    阅过留痕
    最后几篇了,这个专栏马上结束了,回头想想自己都学到了那些内容了呢?
    JVM的各个部分从外到内,由浅入深老师都讲到了,大部分内容是都挺明白了,有些还有待消化,不过下面还要继续的学习,专栏的目标是带我们入门!

    本节讲解的Graal先混个脸熟,以后继续深入

    1:Graal是一个编译器,是使用java语言编写的编译器,既然是编译器就拥有编译器的各种特点(主要负责接收JAVA字节码,并且声称可以直接运行的二进制码),当然,后来者通常比先来的会多一些特点,否则也没有必要来啦!Graal性能相对来说更好一点、更具模块化、更易维护(相对C2而言)Graal编译器是一个即时编译器,从JDK9就被集成到JDK中了,当然,可能还不成熟时作为一个实验性质的编译器集成到JDK中的,可以有选择的行的启动或者关闭。

    2:Graal编译器是GraalVm的基石,编译器是VM的一部分,相对来说比较独立,它和JVM的交互主要有如下三部分,
    2-1)响应变异请求
    2-2)获取编译所需的元数据(如:类、方法、字段)和反应程序执行状态的profile
    2-3)将生成的二进制码不熟至代码缓存里

    3:Graal和JVM通过JVMCI来实现解耦,本质是通过java语言层面的接口来实现解耦的

    嗯,感觉有些懵懂,专栏快结束了,老师辛苦了,希望老师来点随学随用的分析jvm性能瓶颈和解决方式的例子,当然,这个部分内容网上也比较多,只是希望更系统一点,举几个高频的示例!

    展开
    
     3
  • xiaobang
    2018-10-10
    openjdk里Graal自身的及时编译是调用Graal自身吗?如果这么做会不会出现无穷递归?

    作者回复: 1. 默认情况下,是用C1编译Graal。
    2. 调用Graal编译Graal并不会造成无穷递归。因为JVM里有解释执行器,能够执行Graal代码。

    
     2
  • Nthan89757
    2019-04-17
    求证: 同样的代码,使用jdk1.6编译的和使用jdk1.8编译,在同样的jdk1.8的jvm环境运行,性能是否有差异?
    是不是需要看1.6的javap和1.8的javap 出来的字节码是否有差别?
    
     1
  • colin
    2019-05-31
    其实我好奇openJdk是不是可以代替Oracle 的Jdk呢
    
    
我们在线,来聊聊吧