我最近注意到有幾個java庫(JDK,joda time,iText)沒有一些/所有的調試信息。局部變量信息丟失,或者局部變量信息和行號都丟失。爲什麼一些java庫沒有調試信息編譯
這是否有任何理由?我意識到它使編譯的代碼更大,但我不認爲這是一個特別大的考慮因素。或者它只是建立在默認的編譯選項上?
謝謝。
我最近注意到有幾個java庫(JDK,joda time,iText)沒有一些/所有的調試信息。局部變量信息丟失,或者局部變量信息和行號都丟失。爲什麼一些java庫沒有調試信息編譯
這是否有任何理由?我意識到它使編譯的代碼更大,但我不認爲這是一個特別大的考慮因素。或者它只是建立在默認的編譯選項上?
謝謝。
默認的編譯選項不包含調試信息,您必須具體告訴編譯器將其包含在內。大多數人省略它有幾個原因:
正如John指出的那樣,Java字節碼在今天已經不再被優化(很多)了。所以對於這兩種情況,類文件的輸出將是相同的(只有帶調試信息的類文件會更大)。該代碼在JIT運行時進行了優化,允許運行時爲CPU優化代碼,內存(數量和佈局)等。
提到的5%懲罰是當您運行代碼並添加命令行允許遠程調試器附加到進程的選項。如果您不啓用遠程調試,則不會受到任何處罰(類加載除外,但只發生一次)。
此外,當您在調試時編譯你也可以在不優化代碼的情況下進行編譯(否則行號將毫無意義),所以你會失去(靜態/最終/私有)方法/屬性的性能優勢 – Ian 2009-12-09 09:05:03
@iAn:在Java中,使用優化進行編譯是總之毫無意義 - IIRC他們已經取消了這個選項,或者讓它變成了一個無效的選項。您不會失去性能,因爲優化是由JIT執行的。 – 2009-12-09 09:10:44
是的,今天,Java代碼在運行時進行了優化。 5%的速度懲罰實際上是在*運行附帶遠程調試器選項的代碼時。 – 2009-12-09 09:52:16
安裝的可能大小。調試信息增加了Sun可能不喜歡的jar文件的開銷。
我最近研究一個Java Web Start的問題 - 沒有調試信息可用 - 所以加滿跟蹤到java控制檯和下載源代碼幫助一些,但代碼是相當糾結所以我只是想調試建立。
JDK應該隨處編譯FULL調試信息!
FYI有一個包含調試信息的JDK6u18 DEBUG jar。它比替代品大20mb左右。看到這裏:http://download.java.net/jdk6/ – 2010-01-13 01:27:07
通常情況下,您應該能夠下載lib的未優化/「可調試」版本,或者您可以咬下子彈並自己下拉src – Ian 2009-12-09 09:06:40