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的下載地址  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM