2012-09-18 42 views
6

我正在做一個基於swing的應用程序,我使用JTable。我使用DefaultCellEditor作爲需要組合框選擇的列之一。但是DefaultCellEditor有很多我不需要的方法。所以我通過擴展AbstractCellEditor來編寫定製的CellEditor,在那裏我只實現了所需的方法。我的問題是java類的大小是否會影響應用程序的性能

(一般情況下)如果我們有一個類,並且如果我們不需要該類的所有方法,那麼使用它就好了,或者編寫一個自定義類,而我們只實現這些方法我們需要什麼?和

通過使用自定義類將提高應用程序的性能(內存),或它將保持與具有所有方法的類相同嗎?

任何幫助將不勝感激。

+6

「過早優化是萬惡之根」 –

+0

@guido「過早優化是萬惡之源」的愛吧。:) – Amarnath

+2

Mathias,你是說JVM不會加載一個類的所有方法 - 只有實際調用的那些方法?你有參考嗎? – Faelkle

回答

15

除非您有充分理由相信包括JDK本身在內的應用程序中沒有其他內容使用DefaultCellEditor,否則幾乎肯定會讓事情變得更加糟糕。

您還需要考慮在極端情況下,您可能已經保存了大概10萬個代碼,其中典型的JVMS使用大約1 GB的代碼執行。所以你可能已經節省了0.01%的代碼空間。這不是對你的時間的有效利用。事實之後,正確的程序是測試和測量時間和空間瓶頸的真實位置。程序員在預測這些事情方面的能力很差。

+0

+1。使用'DefaultCellEditor'是因爲你知道它會起作用,並且你不會引入任何錯誤。完成後,對系統進行配置,如果'DefaultCellEditor'顯示爲熱點,則考慮自定義或重寫它。最後優化,當你完全理解問題空間,並且你有一個工作解決方案。 – Faelkle

3

該類的代碼(實際字節碼)只在內存的PermGen區域中加載一次,而不管該實例化此類型的對象數量多少。

我不會接受這個代碼,因爲要複製功能,這已經是可用的,而且你不添加功能AbstractCellEditor,你重新實現在DefaultCellEditor代碼已經被(希望)由Oracle(或Sun測試)。

正如EJP所說,引入錯誤並不值得浪費時間和潛力。

1

如果您創建包含更少成員對象的自定義類,則內存佔用將更低。方法的數量不會影響對象的大小,只是類的大小。一般來說,除非確定實際上有問題,否則我不會過早地進行優化(例如,如果您有數千個對象實例,並且堆/垃圾收集器日誌分析顯示您正在調試內存和/或經常有舊空間的集合)的,因爲額外的代碼的意思是:

  • 額外的維護(你需要確保你的自定義CellEditor不是越野車)
  • 額外的努力以書面自定義代碼
  • 額外的努力測試自定義代碼

AFAIK,CellEditor在需要時被實例化,因此無論如何您都不會節省太多內存。

+0

如果沒有其他人使用被替換的類,在這種情況下爲'DefaultCellEditor',並且它不回答問題,這是關於方法而不是'成員對象'的問題,您的第一句只有真。 – EJP

+0

確實如此,但這種事情很難衡量,因爲對其他對象的對象進行了強烈的引用。如果他將某些東西傳遞給已經在對象圖的其他地方引用過的構造函數,那麼淺的覆蓋區可能會增加,但所用的總內存不會增加。 – Faelkle

相關問題