Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
mich plagt da eine Frage und zwar versuche ich die Anzahl von angelegten Objekten einer Klasse herauszubekommen. Bis jetzt hab ich einfach im Konstruktor eine klassenvariable hochzählen lassen um jene Anzahl abfragen zu können, was nur etwas schlecht ist wenn man das Objekt wieder auf null setzt, dann ist es weg aber die Anzahl stimmt nicht mehr.
Gibt es eine Möglichkeit die im Anzahl der angelegten Objekte einer Javaklasse abzufragen und sei es irgendwie über die Klasse object?
Ist nich direkt nen Anwednungsfall, das hab ich nur gemacht um mir Objekte in java etwas näher zu führen (hab sonst andere sprachen benutzt) dafür hab ich halt objekte angelegt (einer selbst erfundenen klasse) und hab nur um zu sehen wieviele objekte es sind, im konstruktor eine zählvariable hochgezählt.
Nur wenn ich eine Objekt nu wieder lösche, also die referenzadresse im speicher nulle bleibt mein testzähler da ja bestehen, habe mich nur gefragt wie man das wohl abfragen könnte dass ein objekt "zerstört" wurde, sprich den zähler wieder runtersetzen.
Rein theoretisch könnte man über den Finalizer der Klasse den Zähler wieder runtersetzen. Praktisch wäre das ein Selbstmord, denn niemand garantiert, dass der Finalizer jemals aufgerufen wird.
:arrow: Geht nicht, Zählvariablen müssen "von Hand" rauf und runtergezählt werden.
Ja und Nein. Vielleicht wird finalize() tatsächlich aufgerufen, aber die Referenz ist schon lange nicht mehr da. Wenn ich jetzt die Referenz a auf null setze, kann es noch immer Ewigkeiten (manchmal im wahrsten Sinne des Wortes) dauern, bis finalize() aufgerufen wird.
Man könnte eine Klassenvariable mitzählen lassen und eine Methode implementieren, die ein internes Flag (objektgebunden) löscht und den Instanzenzähler dekrementiert. Wenn dieses Flag gelöscht ist, funktionieren dann alle Methoden nicht mehr (indem zu Beginn immer überprüft wird, ob das Flag bereits gelöscht wurde). Natürlich muss der Konstruktor den Instanzenzähler (klassengebunden) inkrementieren und das Flag zu Beginn setzen.
Deine Referenzen verwendest Du als KEY in einer WeakHashMap. (für VALUE nimmst Du am besten aber immer das gleiche Object -> Ressourcen)
API: WeakHashMap hat gesagt.:
An entry in a WeakHashMap will automatically be removed when its key is no longer in ordinary use. More precisely, the presence of a mapping for a given key will not prevent the key from being discarded by the garbage collector, that is, made finalizable, finalized, and then reclaimed.