2017-02-27 57 views
0

我做了一個簡單的Java文件:Java的.class文件大小Vs的java文件大小

class Hello { 
    public static void main(String arg[]) { 
     System.out.println("Hello"); 
    } 
} 

這個hello.java文件的大小是87字節而類文件的大小是401字節

我不得不問什麼東西得到代碼,以便類文件具有大尺寸?

+8

https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html –

+0

而且你可以運行javap -p加上一些其他的選項,我不知道通過心臟看到類完全拆卸 – GhostCat

+3

你應該做的第一件事是通過完全寫出編譯器爲你填充的所有東西來比較蘋果和蘋果:(1)顯式聲明'extends java.lang.Object'(2)包括無參數構造函數(3)完全限定所有引用(例如'java.lang.String')(4)字節碼還包含完整的類名和任何方法調用的簽名,因此在方法調用中添加一些強制類型: '((java.io.PrintStream)System.out).println((java.lang.String)「Hello」);'(5)在方法調用和構造函數調用中顯式使用'return'。所有這一切,你的文件增長到200B。 – yshavit

回答

0

我不得不問什麼東西得到添加到代碼,以便類文件具有大尺寸?

你的問題是建立在一個謬論上。源代碼不在.class文件中,因此沒有任何內容被「添加」。然而大量的東西是編譯到.class文件:

  1. 一個.class文件頭,其中包括Java版本的信息,類名和包名,超類中,實現的接口,常量池大小和數據,字段計數和字段,方法計數和方法,屬性計數和屬性等。
  2. 包含字節碼的方法區域。

有關詳細信息,請參見JVM Specification #4