Anzahl Referenzen bestimmen



  • Hallo zusammen

    Wie kann ich die Anzahl der Referenzen bestimmen, die auf mein Objekt zeigen? Das sollte irgendwie möglich sein, der GC braucht das ja auch.

    Gruss schoetz



  • Ich befürchte über den gc gar nicht. Ich denke nämlich nicht dass der gc ein simples reference-counting macht (problematisch bei zyklischen Referenzen). In dem Zusammenhang müsste man sich den GC etwas näher ansehen. Ausserdem würde ich mein Programmverhalten nicht abhängig von einer (vielleicht miserabel implementierten) JVM machen 🙂

    Es gibt aber ein Package mit dem man einen stärkeren Bezug zum gc aufbauen können soll. Ich persönlich habe das noch nie verwendet aber vielleicht gibt es dir ein paar Ideen: java.lang.ref (guckssu java-api-doku).

    Eine andere Möglichkeit wäre in deiner Klasse die finalize-Methode zu überschreiben. Dann wüsstest du zumindest wann keine Referenz mehr auf das Objekt vorhanden ist. Wobei man bei finalize auch vorsichtig sein muss ...

    [ Dieser Beitrag wurde am 23.04.2003 um 12:42 Uhr von CengizS editiert. ]



  • Werde mir java.lang.ref mal angucken. Ist vieleicht die einzige Lösung. Ich muss wissen ob es 1 oder mehr als 1 Referenz auf ein Objekt gibt und das finde ich mit finalize nie raus.

    Gruss schoetz



  • Darf ich mal nach dem Anwendungsfall fragen? Interessiert mich schon was du da so machst 🙂



  • Ich habe eine Hashmap und dort sind Objekte drin, die ich aber sonst auch noch brauche. Ich kann nicht genau bestimmen, wenn ich die nicht mehr brauche, deshalb sollte die Hashmap von Zeit zu Zeit von selbst prüfen ob es noch andere Referenzen darauf gibt oder nicht. Wenn es diese nicht gibt, sollte das Objekt aus der Hashmap genommen werden damit es der GC zerstören kann.



  • Jetzt habe ich glaube ich eine Lösung gefunden. Ich muss in die HashMap WeakReferences reintun. Diese Referenzen schützen das Objekt nicht vor dem finalize. Das heisst, wenn nur noch eine WeakReference auf das Objekt zeigt wird das Objekt vom GC zerstört.

    Ich habe es noch nicht ausprobiert, es müsste aber gehen.


Anmelden zum Antworten