簡體   English   中英

Java是向后兼容的,但是當我們將jdk從1.6升級到1.8時,為什么我們需要升級許多庫?

[英]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 但是有一些編譯或運行時錯誤,所以我必須升級一些庫:

  • gradle: 1.91.10
  • 彈簧: 3.x4.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.

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