2017-06-06 30 views
1

在Oracle的Java - Essential Classes Trail我發現下面的語句:什麼是JVM中的動態鏈接失敗?

Error Class

When a dynamic linking failure or other hard failure in the Java virtual machine occurs, the virtual machine throws an Error. [...]

到底是由動態鏈接失敗的Java和JVM的背景是什麼意思?這與類加載器在運行時可能遇到的問題有關嗎?

+0

動態鏈接是指將本機代碼庫引入JVM以通過JNI/JNA調用。對於Windows,這將是一個DLL。這描述了該過程失敗。 –

+1

查看['LinkageError'](https://docs.oracle.com/javase/8/docs/api/?java/lang/LinkageError.html)及其「直接已知子類」。這些名字已經暗示在運行時會出現什麼問題... – Holger

回答

1

在Java中,您可以動態加載Class對象,驗證該Class及其實例是否與當前加載的類兼容的邏輯稱爲動態鏈接。

下面舉例說明時,您可以在java.lang.LinkageError的形式獲取鏈接失敗:

1)您有類和接口。您稍後修改該接口方法簽名並使用該新接口啓動VM。現在,如果你去動態地嘗試加載你的類,你會得到連接失敗,因爲類是用老版本的接口方法簽名編譯的,並且不能使用新的接口方法簽名。

2)從類加載器CL1和CL2加載相同的類。然後,您可以從CL1加載的類中創建對象o1,並在由CL2加載的代碼中使用該對象。

相關問題