2015-06-28 25 views
-2

我有點困惑... 我知道只有在需要它們的時候,類加載器纔會加載這些類,也就是當我們試圖使用靜態變量或者何時我們正在創建該類的實例。因此,如果我們有例如在我們的程序中有3個類,我們將只使用一個類,然後只加載那些特定的類並且不休息,但是當我們運行java編譯器時,它會創建3個.class文件,我知道這3個.class文件是字節碼文件,但是這個字節碼是什麼,加載一個類和生成一個類的字節碼有什麼區別?這個字節碼的使用在哪裏?如果我們不打算使用某個特定的類,那麼什麼是否需要爲該類生成一個字節碼?java中的字節代碼有什麼用途

+0

因此,當你需要它時它會更快? – Drew

+4

如果你不想使用特定的類,爲什麼要寫它? – RealSkeptic

+3

爲什麼notepad.exe在我的系統上?我現在不使用它 – Drew

回答

4

Java是一種編譯語言。編譯成字節碼的目的是允許代碼在任何平臺上的JVM上運行。平臺獨立性是Java內置的一項功能。 此外,除非它們具有相互依賴關係,否則不必編譯所有三個類文件。您可以指定要在控制檯javac命令中編譯哪些特定文件。如果您使用的是IDE,請檢查您的設置或從項目中排除不需要的類。

3

正在加載一個類在運行時發生,當您準備調用該類所具有的任何屬性時。

生成類的字節碼發生在編譯時。這允許代碼在虛擬機上運行。

Java是一種編譯語言,它運行在Java虛擬機之上。編譯字節碼可將任何更高級別的代碼(無論是Java,Scala還是Clojure)轉換爲machine-independent instructions以供JVM讀取。這就是爲什麼你的(特定於後端的)計劃將沒有在Linux,Windows和Mac OS X的修改通常運行

Java語言將編譯路徑中對彼此的依賴任何類,因此,如果您有一個類,但它不被使用,很可能不會被編譯。可能有工具會覆蓋它,所以如果您發現自己沒有使用類,請移除該類,以避免生成不必要的字節碼。

1

C++和java等語言之間的差異是字節碼。 C++二進制文件(編譯,彙編,鏈接)將爲其編譯的操作系統提供機器(操作)代碼。在Java的情況下,字節碼是JVM的目標。字節碼將具有JVM的操作碼。 JVM反過來會啓動相應的os調用。所以字節碼和JVM使java程序獨立於操作系統。 註冊加載類加載,它發生在程序需要它時。這是在運行時。 JIT將在需要時進行第二次編譯。

相關問題