Hi,
Ich habe mich gewundert, daß Java sehr viel mehr Speicher in einer Lookupstruktur als herkömmliche Sprachen verbraucht (siehe auch
www.java-forum.org/de/viewtopic.php?t=37725). Es ist etwas mehr als das doppelte zum herkömmlichen Code. Der Grund dafür liegt in der üppigen Speicherauslegung für Referenzobjekte. Ein Beispiel, eine TreeMap (AVL-Tree) mit einem Eintrag ..also Klasse Entry <K,V> hat folgende Referenzobjekte:
Key : Objekt - 8 Byte
Value : Objekt - 8 Byte
Left : Objekt - 8 Byte
Right : Objekt - 8 Byte
Parent : Objekt - 8 Byte
color: boolean - hoffentlich 1Byte
Je nach dem wieviel Objekte in den Containern Key und Value eingebettet sind werden für jede "Adressoperation" also Klassenreferenzen noch einmal das doppelte an Speicher verbraucht.
In den "älteren Sprachen" sind Key, Value, Left und Parent Adressen also für 32 Bit-Strukturen 4 Byte also die Hälfte.
Frage, gibt es eine Möglichkeit, das anders zu organisieren ..sprich referenzieren... Oder ist Java, weil es keine Adressoperatoren besitzt auf diesen Mechanismus festgelegt und verbraucht somit per Definition immer das doppelte an Speicher bei Referenzstrukturen (Objekt anstelle von Pointer). Weiß einer von den Gurus was?
Bis denne huck
Ich habe mich gewundert, daß Java sehr viel mehr Speicher in einer Lookupstruktur als herkömmliche Sprachen verbraucht (siehe auch
www.java-forum.org/de/viewtopic.php?t=37725). Es ist etwas mehr als das doppelte zum herkömmlichen Code. Der Grund dafür liegt in der üppigen Speicherauslegung für Referenzobjekte. Ein Beispiel, eine TreeMap (AVL-Tree) mit einem Eintrag ..also Klasse Entry <K,V> hat folgende Referenzobjekte:
Key : Objekt - 8 Byte
Value : Objekt - 8 Byte
Left : Objekt - 8 Byte
Right : Objekt - 8 Byte
Parent : Objekt - 8 Byte
color: boolean - hoffentlich 1Byte
Je nach dem wieviel Objekte in den Containern Key und Value eingebettet sind werden für jede "Adressoperation" also Klassenreferenzen noch einmal das doppelte an Speicher verbraucht.
In den "älteren Sprachen" sind Key, Value, Left und Parent Adressen also für 32 Bit-Strukturen 4 Byte also die Hälfte.
Frage, gibt es eine Möglichkeit, das anders zu organisieren ..sprich referenzieren... Oder ist Java, weil es keine Adressoperatoren besitzt auf diesen Mechanismus festgelegt und verbraucht somit per Definition immer das doppelte an Speicher bei Referenzstrukturen (Objekt anstelle von Pointer). Weiß einer von den Gurus was?
Bis denne huck