2013-03-15 14 views

Odpowiedz

4

Pula interakcji dla stałych łańcuchowych Java jest znana kompilatorowi Java, więc nie można naśladować dokładnie tego zachowania.

Jednak sama pula to nic innego jak mapa skrótów. Jeśli Twój obiekt ma odpowiedni identyfikator, możesz zrolować pulę dla własnych obiektów: po prostu stwórz statyczną metodę, która pobiera klucz, wyszukuje go w statycznej mapie skrótów i buduje nowy obiekt tylko wtedy, gdy nie został połączony jeszcze. Zauważ jednak, że aby ten prosty schemat działał, ważne jest, aby obiekt był niezmienny.

+0

, więc zasadniczo utrzymanie statycznej hashMap będzie replikować pulę. dobrze? , a to oznacza mniejszą liczbę pól w puli typu, bardziej efektywne/wydajne buforowanie byłoby? – Ankit

+1

@ ay89 Ogólnie rzecz biorąc, tworzenie puli będzie skuteczne tylko wtedy, gdy pomiędzy tworzonymi obiektami będzie dużo duplikacji. Możesz mieć obiekt z 30 polami przedstawiającymi klienta, wraz z jego adresem, numerami telefonów itp. Jeśli masz tylko 100 klientów, twoja łączność będzie bardzo wydajna nawet w przypadku zajęć, które mają wiele pól. Jeśli, z drugiej strony, spróbujesz połączyć klasy reprezentujące współrzędne w 2D (pary liczb całkowitych) i użyć go na zestawie 10 000 losowo wygenerowanych współrzędnych, buforowanie nie będzie w ogóle wydajne, nawet jeśli istnieją tylko dwa pola. – dasblinkenlight

+0

ok, ale jeśli istnieje więcej duplikatów obiektów o większej liczbie pól, zbieranie będzie efektywne pod względem pamięci. ale w tym samym czasie, myślę, że pochłonie więcej czasu, porównując większą liczbę pól, aby zdecydować, czy obiekt jest duplikatem czy nie. dobrze? – Ankit

3

basen String nie jest tylko basen/cache Java, Integer i innych klas otoki używać pamięci podręcznej, można spojrzeć na kodzie źródłowym Integer jako przykład

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); 
} 

można również spojrzeć pod adresem http://commons.apache.org/proper/commons-pool//

Powiązane problemy