2011-02-23 117 views

回答

3

沒有主要的Java編譯器做任何類型的優化(除了一些常數值摺疊)。這通常是爲了讓JVM在運行時完成的。

要找出一個.class是有或沒有調試信息生成,使用-v標誌,並尋找LineNumberTable屬性在其上運行javap。他們應該是這個樣子:

 
    LineNumberTable: 
    line 7: 0 
    line 8: 8 

如果類與完整的調試信息(包括局部變量)編譯的,那麼它也包含了LocalVariableTable這樣的:

 
    LocalVariableTable: 
    Start Length Slot Name Signature 
    0  9  0 argc  [Ljava/lang/String; 

一個編譯器標誌,實際上影響輸出是-encoding指定輸入源文件編碼。由於.class文件中的字符串文字始終使用UTF-8,因此無法從.class文件檢測到原始源文件編碼。