[英]Java is backward compatible, but why we need to upgrade many libraries when we upgrade jdk from 1.6 to 1.8?
最近,我在一個Java項目中將Jdk版本從1.6
升級到1.8
。 但是有一些編譯或運行時錯誤,所以我必須升級一些庫:
1.9
到1.10
3.x
到4.x
那是因為他們使用的是早期版本的ASM,但僅支持5.x
jdk 1.8
Java表示它是向后兼容的,但為什么原始版本的庫無法直接與jdk 1.8一起使用?
ASM是一個非常低級的庫。
它直接處理Java字節碼(而“普通”應用程序只是讓JVM加載其類)。 字節碼格式會不時更改,較舊的JVM不能使用較新的版本。
向后兼容性不包括與JDK或類格式內部的混淆。
這實際上是一個邊緣案例,ASM幾乎是唯一的“流行”示例。
更重要的是(也更常見)系統庫代碼中的輕微行為變化。 因此,您的應用程序在技術上仍會運行,但以不同的方式執行。 大多數情況下,您需要這樣做,因為它意味着改進(例如更好的性能),但有時它可能會導致您的錯誤。
例如:
但總體來說,遺留的應用程序兼容性故事對Java來說非常好。 他們必須牢記所有企業客戶的需求。
因為ASM是一個在Java字節碼上運行的工具。 並且字節碼格式改變以引入新功能。 因此,您必須升級該工具以支持新的字節碼。
請注意,使用較舊版本的JDK編譯的軟件並不總是適用於較新版本的Java。 例如,在早期版本的JDK中, enum
不是關鍵字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.