Ich dump alle Speicher (jmap-histo) nach dem Laden von Daten aus memcahced und dann lade ich die gleichen Daten erneut (Die Daten werden in eine andere Instanz geladen), aber die verwendet Speicher wurde nicht geändert. Kein GC wurde gemacht (ich zuteile 2g neue Größe Heap und überprüfen Sie mit Jstat und anderen Tools, dass kein GC getan wurde). Der zweite Heap enthält 2 Instanzen von dem Typ, den ich von memcached geladen habe. Ich vergleiche den Heap nach dem zweiten Laden mit dem Heap nach dem ersten Laden. Der zweite Heap hat in jeder Klassenart mehr Instanzen als der erste Heap außer [I, dass der zweite Heap kleiner als der erste ist. Das gleiche der Lücke (Bytes) zwischen den anderen Klassen im Heap ist das gleiche wie die Lücke für [I.Gebrauchte Speicherdosnt geändert, nachdem zusätzliches Objekt von memcached erhalten
Ich schaue auf den Byte-Code und habe nichts Verdächtiges gesehen. Irgendeine Idee?
public static void main(String[] args) throws Throwable {
Object a1 = mc.get("userClient");
-- get dump
Object a11 = mc.get("userClient");
-- get dump
mc.shutdown();
}
['freeMemory()'] (https://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html#freeMemory%28%29) liefert "eine Annäherung an die Gesamtsumme momentan verfügbarer Speicherplatz ". – JimmyB
Dies ist der Grund, dass ich schrieb, dass ich jmap (jmap-histo) verwendet habe, um einen Dump zu machen und die Zahlen zu überprüfen. –