簡體   English   中英

JDK 7類文件向后兼容JDK 6

[英]JDK 7 class file backward compatibility with JDK 6

JDK 7的哪些功能(不包括invokedynamic,因為它不被java使用)導致新的類文件版本不符合JDK 6.它表明所有功能都可以由生成粘合代碼的編譯器實現。 例如,switch語句中的String可以使用編譯器生成的重復ifeq語句來實現。 我希望能夠為編譯器提供-source 1.7 -target 1.6標志以符合jre 6,同時在jdk 7中使用項目硬幣功能。

我還沒有讀過編譯器的代碼,但是一些新功能顯然必須對字節碼產生影響。

“簡化的varargs方法調用”實際上只是一個警告抑制,但它必須在字節碼中留下一些標記,以便客戶端代碼可以以不同方式顯示警告。

“Try-with-resources”生成的代碼可以處理正常異常以及在finally塊期間拋出的第二個異常。 使用新的addSuppressed()方法存儲額外的異常。 這不是一個類文件格式更改,但它顯然不適用於早期的VM。

“Multi-catch”還產生的字節碼與以前的編譯器產生的字節碼略有不同。 現在,異常表中的多個條目將指向相同的catch主體。

所以,讓我確保我理解這一點。 您希望在應用程序中針對不同的JRE運行特定的類,然后是所有其他類嗎? 我認為這在理論上是可行的,如果在每個類的使用中你不想使用不同的版本,你就可以啟動一個單獨的JVM。 這將涉及一定程度的復雜性,相當於在不相交的應用程序中在兩個JVM之間傳遞信息。 開箱即用它不會這樣工作,因為6中的執行環境不會知道項目硬幣功能。 IIRC你不能在1.4運行時使用泛型,那么這有什么不同呢? 在一天結束時,它似乎真的不值得,然后再次,也許我完全錯過了你的觀點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM