2009-12-01 18 views
6

Angenommen, ich habe eine Java-Klasse mit Codecode von 100K, der NO-Variablen enthält, aber nur 20 Byte an Attributen.Welchen Speicherbedarf hat ein methodenintensives Java-Objekt?

Ich instanziiere 1000 Objekte aus dieser Klasse.

Habe ich 100.000K Speicher verbraucht? Oder nur 100K + (20Bytes * 1000)? Oder etwas ganz anderes?

+1

können Sie es ausführen, und überprüfen Sie Task-Manager/oder top, wenn Sie auf Linux sind .... – Dani

Antwort

10

Der Speicherbedarf für das Laden der Klasse selbst entspricht ungefähr der Codegröße, aber der Code wird nicht für jede Instanz der Klasse dupliziert. Eine Instanz benötigt nur so viel Arbeitsspeicher wie die Instanzattribute und einen gewissen Mehraufwand für die Verwaltung der Objektinstanz selbst.

0

Sie haben nur den 'variablen' Teil der Objekte instanziiert, also nur die Attribute (und ich vermute ein paar Bytes Overhead hier und da). Ihre letzte Vermutung ist die richtige.

2

Hier ist ein allgemeiner Leitfaden für die Speichernutzung von Objekten in Java Bestimmung: http://www.javamex.com/tutorials/memory/object_memory_usage.shtml

Ich vermute, dass die Speicherauslastung von Methodendefinitionen anfallen einen festen Betrag sein, (möglicherweise in PermGen Raum setzen, wenn die Klasse geladen) und nicht proportional zur Anzahl der Instanzen.

0

Versuchen Sie, mit jviewvismvm (im JDK) zu verbinden und sagen Sie uns, was Sie sehen.