jdk 10.0.2 bug修复

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

还是这段代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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)

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 #70              // 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的下载地址  

posted @   菩提树下的杨过  阅读(937)  评论(1编辑  收藏  举报
编辑推荐:
· 聊一聊 C#前台线程 如何阻塞程序退出
· 几种数据库优化技巧
· 聊一聊坑人的 C# MySql.Data SDK
· 使用 .NET Core 实现一个自定义日志记录器
· [杂谈]如何选择:Session 还是 JWT?
阅读排行:
· 一个.NET开源、易于使用的屏幕录制工具
· 【经验】几种数据库优化技巧
· C#中 Task 结合 CancellationTokenSource的妙用
· Superpower:一个基于 C# 的文本解析工具开源项目
· 反微服务架构(A Macro Services Framework)
历史上的今天:
2014-07-28 利用Weblogic的iisproxy、iisforward插件实现IIS转发
点击右上角即可分享
微信分享提示