幻兽天下修复版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 就过期了(即:又得升级)

7a2ab9a1d38bb876bac86a77fca072bf.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值