2013-03-15 152 views

回答

4

Java String常量的實習池是Java編譯器已知的,因此您無法親自模擬確切的行爲。

然而,池本身不過是一個哈希映射。如果你的對象有一個合適的標識符,你當然可以爲你自己的對象滾動一個池:簡單地創建一個靜態方法,該方法需要一個鍵,在靜態哈希映射中查找它,並且只有在沒有合併時才構建一個新對象然而。但是,請注意,在這個簡單的方案工作,你的對象是不可改變的。

+0

所以基本上保持一個靜態哈希映射將複製池。對? ,這意味着池式字段的數量更少,緩存會更有效/更高效? – Ankit 2013-03-15 10:28:22

+1

@ ay89通常,只有當您創建的對象之間存在大量重複時,池纔會有效。您可以擁有一個包含代表客戶的30個字段的對象,以及他的地址,電話號碼等。如果您只有100個客戶,那麼即使擁有大量字段的班級,您的集合也將非常有效。另一方面,如果您嘗試使用代表2D座標(整數對)的類來合併類,並將其用於一組10,000個隨機生成的座標,則緩存將不會有效,即使只有兩個領域。 – dasblinkenlight 2013-03-15 10:35:10

+0

好的,但是如果有更多的字段數量較多的重複對象,那麼就內存而言,池化將是有效的。但同時,我認爲,它會消耗更多的時間,比較大量的字段來決定對象是否重複。對? – Ankit 2013-03-15 10:46:11

3

字符串池是不是在Java中,整數和其他包裝類的唯一池/緩存使用緩存,你可以去看看整數源代碼爲例

public static Integer valueOf(int i) { 
    assert IntegerCache.high >= 127; 
    if (i >= IntegerCache.low && i <= IntegerCache.high) 
     return IntegerCache.cache[i + (-IntegerCache.low)]; 
    return new Integer(i); 
} 

你也可以看看在http://commons.apache.org/proper/commons-pool//

相關問題