簡體   English   中英

為什么編譯一些沒有調試信息的java庫

[英]Why are some java libraries compiled without debugging information

我最近注意到有一些java庫(JDK,joda time,iText)在沒有部分/全部調試信息的情況下編譯。 缺少局部變量信息,或者缺少局部變量信息和行號。

這有什么理由嗎? 我意識到它會使編譯代碼更大,但我不認為這是一個特別重要的考慮因素。 或者它只是使用默認的編譯選項構建?

謝謝。

默認的編譯選項不包含調試信息,您必須明確告訴編譯器包含它。 大多數人省略它有幾個原因:

  • 一些庫用於嵌入式系統(如移動電話)。 直到最近,每一點都算在內。 今天,大多數手機擁有的內存比1985年的所有計算機都要多;)
  • 使用調試激活編譯時,代碼運行速度慢5%。 不多,但在某些情況下,每個周期都很重要。
  • 今天的高級開發人員誕生於64KB RAM非常龐大的時代。 昨天,我在地窖里為我的服務器增加了另外一個2TB硬盤。 這是25年來的7個數量級。 人類需要更多時間來調整。

[編輯]正如John指出的那樣,Java字節碼今天不再優化(很多)。 因此,對於這兩種情況,類文件的輸出都是相同的(只有具有調試信息的類文件才會更大)。 代碼在運行時在JIT中進行了優化,允許運行時優化CPU,內存(數量和布局)等代碼。

提到的5%代價是運行代碼並添加命令行選項以允許遠程調試器附加到進程。 如果您不啟用遠程調試,則不會受到懲罰(類加載除外,但只發生一次)。

可能是安裝尺寸。 調試信息增加了Sun可能不喜歡的jar文件的開銷。

我最近不得不調查Java Web Start問題 - 沒有可用的調試信息 - 因此向java控制台添加完整跟蹤並下載源代碼有所幫助,但代碼相當混亂,所以我只是喜歡調試版本。

應該使用FULL調試信息編譯JDK

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM