2014-05-13 26 views
1

我需要實現將字符串元組緩存到值。在不創建新實例的情況下將元組緩存到值

問題是我不想在從緩存中檢索值時創建新的類實例。

  • 如果字符串拼接使用還是新的字符串將被創建
  • 如果新類StringTuple使用它仍然需要創建

我可以用番石榴緩存或HashMap的,但內存消耗並且應該優化性能。

你會推薦什麼?

+0

是否真的會頻繁使用,以便查找'StringTuple'的創建將對內存分配和年輕GC產生重大影響?無論如何,這些都是小而短暫的對象,所以我會確保在嘗試優化之前測量效果。否則,你可以使用一個'Map >'(儘可能多的級別作爲元組所需的級別),但是使用**和**會更加痛苦,所得到的結構的內存佔用率可能會更高比簡單的一個,所以你會支付GC價格。 –

回答

3

當我看到類似這樣的問題(我也問這些問題)時,我的第一反應是尋找隱藏的假設。

在我看來,這裏有一個隱含的假設,即創建這些短暫的對象只是爲了執行查找是一個非常昂貴的操作。因此,我寫了一個快速的基準測試,其中我創建了兩個緩存,一個基於自定義複雜鍵,另一個基於字符串連接。每個有1,000,000個條目。然後,對於實際的測試,我做了1,000,000次查找。

我發現結果非常接近,在我的機器上大約500毫秒,字符串連接平均慢了大約7.5%。

我還添加了第三個測試,其中我通過複雜鍵進行了查找,但重複使用了同一個對象,只改變了值。我發現這是非常可比的,大約比爲每個查找創建新對象快3.5%。

我的基準測試可能不是非常嚴格,但我認爲這表明這些方法足夠接近以至於我不會爲了執行查找而創建一個小型短命對象。

相關問題