2016-03-30 1 views
1

Ist es möglich zu sehen, wie viele Referenzen es derzeit zu einem Objekt gibt?Anzahl der Referenzen auf ein Objekt zur Laufzeit erhalten

Situation
Ich habe Fälle von Map.Entry in Referenzen gespeichert andere als ihre Map, so kann ich sie behalten, wo ich sie brauche und die Werte direkt zugreifen, ohne dass für die Zuordnung zu seinen Schlüsseln ständig überprüft.

Ich möchte, dass die Referenzen auf die Map geändert werden. Sie werden nicht, wenn ich Map.get(key) verwende.

Es gibt Probleme mit, dass aber ...
Wenn ein Entry entfernt wird, könnte es noch in Referenzen vorhanden sind, die den Wert noch zurückkommen würde. Obwohl ich wählen könnte, nie zu entfernen, aber setze sie auf null, um das zu überwinden.

Allerdings mache ich mir Sorgen, dass die oben genannten würde dazu führen, dass der Speicher mit einer großen Menge von null Einträge im Laufe der Zeit gefüllt wird, sollte es eine Menge von temporären eindeutigen Schlüssel verwendet werden, wie Daten.

Ich dachte, wenn es eine Möglichkeit, die Menge des Verweises auf ein Map.Entry mit dem Wert null, zu erhalten, wenn es 1 sei, dann wäre das die in den Map sein, es bedeutet keine andere Verweise sind, so Es ist sicher, die Entry zu entfernen. Und wenn andere Referenzen vorhanden sind, sollte es bleiben und trotzdem null zurückgeben.

Gibt es eine solche Möglichkeit?

+0

Sie erfinden ein Müllsammler? –

+0

Was meinen Sie mit "die Erinnerung, die mit einer riesigen Menge von Nullen gefüllt wird"? –

+0

@Sleiman Map.Entry Objekte mit dem Wert Null – Myst

Antwort

2

Java-Speicherverwaltung funktioniert nicht so. Nichts überwacht die Anzahl der Referenzen auf ein Objekt.

Es klingt wie Ihr wirkliches Problem ist, dass Sie kein gutes Modell des Lebenszyklus Ihrer Objekte haben. Wenn etwas Map.Entry Objekte abruft und sich an den Referenzen darüber hinaus hält, wenn sie sonst gesammelt worden wären, dann ist das wo das Leck liegt. Sie sollten wahrscheinlich einen Speicherprofiler verwenden (ich habe gefunden YourKit nützlich für diesen Zweck, aber es gibt andere), um festzustellen, was Speicher auffüllt.

Sie sind über C#, Java nicht, aber die Punkte in diesen Blog-Beiträge gelten auch für Ihre Situation:

+0

Konnten Sie die Frage missverstanden haben? Es geht nicht um Speicherlecks/Garbage Collection. – Myst

+0

Empfehlen Sie, sich von Referenzeinträgen zu entfernen und nach einem anderen Weg zu suchen, um das zu erreichen, was ich möchte? – Myst

+1

@Myst: Ihre Frage ist etwas unklar und es ist durchaus möglich, dass ich es falsch verstanden habe. Aber grundsätzlich stehe ich zu meiner Antwort: Ihr Problem scheint zu sein, dass Sie kein gutes Modell für den Lebenszyklus Ihrer Objekte haben. Wenn Sie feststellen, dass Ihre Anwendung mehr Speicher als erwartet verwendet, würde ich definitiv einen Speicherprofiler verwenden, um zu verstehen, was vor sich geht. Sie müssen mehr Daten über das Problem bereitstellen, bevor wir Ihnen bei der Entscheidung über die richtige Lösung helfen können, aber ich bin mir ziemlich sicher, dass alles, was auf der "Menge an Referenzen" basiert, die falsche Lösung ist. –