2016-05-27 57 views
2

這可能聽起來很愚蠢,但我找不到很多關於此的內容(本文除外:https://plumbr.eu/blog/memory-leaks/reducing-memory-consumption-by-20x)。結果集中的空白列中的Java Bean是否會顯着影響內存/大小?

現在的問題是:我們要查詢具有20列的Oracle數據庫表。我們創建了一個映射到所有20列的Java bean。現在使用Spring JDBC,我們執行一個只選擇3列(20個)的查詢,並且我們只設置了bean中的三個屬性(總屬性= 20),這意味着其餘17個屬性應該爲空。現在我們使用這個結果集(有3個字段填充,但17個爲空)進行處理,用於在層之間傳遞等。

這是否會影響Java程序使用的總內存,尤其是當我們要去拉幾百個DB記錄或Java會以某種方式內部優化它?它會更好,只是創造出只有3場一個bean(我們需要爲我們的查詢的一部分嗎?)

我們使用JDK 1.8,彈簧4,甲骨文11

回答

2

這是會影響Java程序使用的總內存。

簡短的回答 - 是的,它會。

顯着?

好吧,這取決於你是什麼意思的「顯着」。

當創建一個類的實例 - 它佔據一些特定的空間。的存儲器使用(對象足跡)

的實際大小取決於許多因素,特別是關於:

  • 類型在bean
    • 字段,如果它是一個原始 - 每個字段具有特定字節數保留see spec
    • 參考類型(對象和它的後代) - 參考也佔據4或8個字節
  • 內存對齊
  • JVM實現
  • JVM參數
  • ...

如果你有17個屬性設置爲null,我們可以假設你有聲明,不是原始的人這些領域。所以如果你不使用這些字段,你可能會期望68或136字節「浪費」。甚至更多。問題是 - 這對你來說太過分了嗎?

你可以儀器的實際對象必須和比較的內存空間,並決定它是否對你合適與否

或Java會以某種方式在內部優化它

我不是意識到這一點。但是,如果有人能夠闡明這一點,那將會很好。

+1

謝謝你的答案Micklesh,這對我有意義。在接受答案之前,我會等待更多輸入。 – JavaTec

相關問題