zoukankan      html  css  js  c++  java
  • 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的下载地址  

  • 相关阅读:
    __weak与__block修饰符区别
    Socket 记录
    Python yaml文件中文读取写入
    Xshell 连接 本地虚拟机
    MySQL查询学生表
    Python Excel读写操作
    pytest mark标记运行
    pytest 参数化
    pytest xfail参数详解
    pytest 失败截图
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/jdk-10_0_2-bug-fix.html
Copyright © 2011-2022 走看看