簡體   English   中英

您如何判斷JDK類是本地實現的,還是用Java代碼實現的?

[英]How can you tell if a JDK class is implemented natively instead of in java code?

例如,在IntelliJ中探索源類時,您會在java.lang.reflect ...中找到類似Constructor的類。所有方法的參數均為var0,var1,var2,... varN。 但是除此之外,怎么會知道它是本地實現的呢?

編輯:正確的問題確實是如何判斷方法是否在Java中是本機的,因為響應者指出,類本身不能是“本機的”。

通常,類本身從來都不是本地的。 只有方法可以具有本機實現。

但這並不意味着JVM無法以特殊方式處理某些類。 但是您不應該分辨出差異。 JVM將它們作為優化 (例如String類)或以其他方式將它們視為不便(例如NoClassDefFoundError )以特殊方式處理,並且可以拋出並打印,即使該類在您的類路徑中不存在也是如此您可以通過移動/重命名rt.jar並運行Java來嘗試。

至於名為varN的構造函數參數,可能是因為您實際上沒有安裝JDK源代碼,並且無論使用哪種IDE都可以看到已反編譯的 Java代碼,其中未保留變量名。 對於Constructor類,該構造函數可能實際上是用Java實現的,但從本機代碼調用了該對象,並返回了該對象。

如果方法具有native修飾符,則它是native方法。 但是,還有一些將JVM視為內在函數的方法。 知道這些的唯一方法以及特殊的類,肯定是查看JVM源代碼。 在什么可以被認為是JVM優化和什么可以被認為是固有的之間,還有一條很細的界限,因為您通常不修改JVM代碼,所以除非您是JDK開發人員,否則這並不重要。 這也是一個實現細節,可以在不同的JVM或不同的JVM版本中進行更改。 實際上,除了一些微小的啟動包裝程序之外,還嘗試過完全用Java編寫JVM,而沒有任何實際的本機代碼。 在這些情況下, 所有內容都在Java中。 沒有本機代碼。

暫無
暫無

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

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