![](/img/trans.png)
[英]Should Java programs compiled with debugging information not be used in a production system?
[英]Why are some java libraries compiled without debugging information
我最近注意到有一些java庫(JDK,joda time,iText)在沒有部分/全部調試信息的情況下編譯。 缺少局部變量信息,或者缺少局部變量信息和行號。
這有什么理由嗎? 我意識到它會使編譯代碼更大,但我不認為這是一個特別重要的考慮因素。 或者它只是使用默認的編譯選項構建?
謝謝。
默認的編譯選項不包含調試信息,您必須明確告訴編譯器包含它。 大多數人省略它有幾個原因:
[編輯]正如John指出的那樣,Java字節碼今天不再優化(很多)。 因此,對於這兩種情況,類文件的輸出都是相同的(只有具有調試信息的類文件才會更大)。 代碼在運行時在JIT中進行了優化,允許運行時優化CPU,內存(數量和布局)等代碼。
提到的5%代價是運行代碼並添加命令行選項以允許遠程調試器附加到進程。 如果您不啟用遠程調試,則不會受到懲罰(類加載除外,但只發生一次)。
可能是安裝尺寸。 調試信息增加了Sun可能不喜歡的jar文件的開銷。
我最近不得不調查Java Web Start問題 - 沒有可用的調試信息 - 因此向java控制台添加完整跟蹤並下載源代碼有所幫助,但代碼相當混亂,所以我只是喜歡調試版本。
應該使用FULL調試信息編譯JDK !
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.