2015-02-24 85 views

回答

2

Java對象有一個8字節的頭,如果是單維數組,則有4字節開銷來容納數組長度。

例如,如果您創建了7個字符串,那麼您將爲對象使用7 * 8字節= 56字節開銷。如果你在一個單維數組中容納它們,你可以爲數組對象添加8個字節+數組長度爲4個字節,因此你將有56個字節+12個字節= 78個字節的開銷。

在多維數組的情況下,在Java中它們是一組數組,因此多維數組的每一行都有一個對象的開銷。

+0

很好的答案。非常感謝安東尼奧 – 2015-02-25 07:30:40

0

String[]使用稍微更多的內存,專門用於創建一個具有length屬性的數組引用。但是,我們正在討論的差異非常小,我會建議哪種解決方案更容易閱讀(我認爲這是數組)。

4

這取決於你正在談論的是什麼樣的內存以及你的意思是100個字符串不在數組中。

讓我們開始我們可以肯定地說。

  1. 如果我們假設字符串創建以同樣的方式,那麼字符串的實際表示將佔據在兩種情況下的堆空間是相同的。

  2. 的100個字符串本身可能佔據的幅度更多的空間訂單比String[] 100元,或100個單個String變量。

不同之處在於我們如何保持對字符串的引用。

  • 如果它們在String[]保持,陣列對象將採取的陣列元件100個字加3或爲數組頭和填充4個字。

  • 如果將它們作爲對象的實例字段進行保存,則會爲這些字段記錄100個堆字。 (加上可能的對象的頭+填充,如果這不是另外計算,那將是2或3個堆字)。

  • 如果它們被作爲靜態字段保存,則需要100個堆字。 (另外可能是隱藏的「靜態」對象的頭+填充...如果不是其他方式)

  • 如果它們作爲局部變量保存,則不需要堆空間。相反,引用將佔用100個字的堆棧空間。


我想知道什麼時候內存問題是至關重要的麪糊的做法。

正如您所看到的,整體差異很小,可能太小而不重要。

而且,在實踐中,您還需要考慮使用數組的代碼大小與使用100個單獨變量的代碼大小的差異。這將取決於應用程序如何使用字符串。事實上,代碼大小的差異可能很容易彌補上述差異。

我的建議是不打擾這一思路。使用任何一種表示方式爲您提供最易讀和可維護的代碼。即使您需要表示數百萬個單獨的字符串組,也不會出現1或2個機器字的差異。

相關問題