2017-09-21 1 views
0

Ich habe den YourKit Profiler verwendet und ich versuche zu analysieren, warum diese Hashtable und es Mutex sind bis zu 196 KB beibehalten; The Bild ist hier beigefügt. Ja, das ist ein Problem, da ich ungefähr 2000 Objekte habe, die 196 kb Daten behalten; Das ist ein potenzielles Problem. Dies ist ein Thread sicher env; Daher wird eine Hashtabelle anstelle von irgendetwas anderem verwendet.beibehalten Größen in der Hashtable und es ist Mutex

+0

Warum gehen Sie einfach nicht tiefer, um zu sehen, welche Elemente diese Größe haben? – egorlitvinenko

+0

@egorlitvinenko Innerhalb des Mutex ist eine Tabelle enthalten, die sich auf etwa 80% des von der gesamten Hashtabelle belegten Platzes auswirkt. Wenn ich ConcurrentHashMap oder eine andere Datenstruktur würde die beibehaltene Größe reduzieren? – bhavs

+0

auch die angegebene Größe ist 137, wo nur 15 Elemente in der Hashtable vorhanden sind, warum so? – bhavs

Antwort

0

Wenn ich ConcurrentHashMap oder eine andere Datenstruktur würde die beibehaltene Größe reduzieren?

Der beste Weg, um die Kapazität zu reduzieren, ist die Anfangskapazität explizit eingestellt (es ist der Parameter des Konstruktors).

Im Allgemeinen ist es besser, ConcurrentHashMap zu verwenden, da es eine abgestreifte Technik und leistungsfähiger als Hashtable verwendet.

Mutex ist Ihre Hashtable-Instanz in diesem Fall. Deshalb sehen Sie diese belegte Größe, weil Sie ein Objekt zweimal sehen.

Hashtable (wie viele andere hashmap, etc.) hat dynamische Größe. Hashtable.size - ist die tatsächliche Größe der reservierten internen Hash-Tabelle, im Gegensatz zu Hashtable.count, also der Anzahl der Elemente.

Der einzige Ort, an dem größere Teile belegt sind, ist Hashtable selbst, also gehen Sie in Hashtable.table und Sie werden sehen, was es ist.

Verwandte Themen