• jdk 10.0.2 bug修复


    之前记录过jdk9+版本的1个bug,某些情况下会导致方法执行二遍,今天早上打开笔记本(mac),弹出一个框提示jdk升级10.0.2,顺手点了一下,然后验证了下该bug,发现居然fix掉了,推荐大家升级!

    还是这段代码:

    public class JavacEvalBug{
     
        private static String[] array = {""};
     
        static int test(){
            System.out.println("evaluated!");
            return 0;
        }
     
        public static void main(String[] args) {
            array[test()] += "a";
        }
     
    }  

    编译运行后,只输出了一次evaluated!,用工具查看字节码:

    javap -verbose JavacEvalBug 

    (注:jdk 10.0.2 在mac上的安装路径为 /Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home)

    输出如下(仅截取了片段):

      public static void main(java.lang.String[]);
        descriptor: ([Ljava/lang/String;)V
        flags: (0x0009) ACC_PUBLIC, ACC_STATIC
        Code:
          stack=4, locals=1, args_size=1
             0: getstatic     #5                  // Field array:[Ljava/lang/String;
             3: invokestatic  #6                  // Method test:()I
             6: dup2
             7: aaload
             8: invokedynamic #7,  0              // InvokeDynamic #0:makeConcatWithConstants:(Ljava/lang/String;)Ljava/lang/String;
            13: aastore
            14: return
          LineNumberTable:
            line 11: 0
            line 12: 14  

      test:() I 这里只调用了1次,这回可以放心使用jdk 10了。顺便,附图一张,jdk近年来更新节奏大提速,从下图看,10.0.2这个版本到2018-12-16 就过期了(即:又得升级)

    oracle官网mac上jdk 10.0.2的下载地址  

  • 相关阅读:
    js 模块循环加载
    英文
    浏览器
    ecma
    Speaking JavaScript
    es6 exploringjs 2
    es6 兼容性
    es6 中文
    Exploring ES6
    探索ES6(ES2015)
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/jdk-10_0_2-bug-fix.html
Copyright © 2020-2023  润新知