Ist es möglich und / oder einfach herauszufinden, wie viele eingehende Referenzen ein beliebiges Objekt hat? Das heißt, wie viele Objekte sich darauf beziehen.
Vielen Dank im Voraus ...
Die kurze Antwort lautet: Zählen Sie sie selbst.
Diese andere StackOverflow-Frage enthält einige nützliche Antworten und Ressourcen
Ist es möglich, die Anzahl der Objektreferenzwerte zu erhalten?
Etwas mehr Googeln taucht auf dieser Seite auf: Ссылка
Was das Folgende nahelegt:
Java führt keine Referenzzählungen. Eine bestimmte JVM könnte (I habe nichts davon gehört, aber wenn eine JVM Referenz hält zählt, dass dies "eine private Angelegenheit" innerhalb der JVM Implementierung ist. Java hat keine Konstrukt- oder Dienstprogrammklasse, um Referenzzählungen abzurufen. auch wenn die JVM sie verwaltet. (Ähnlich könnte die JVM Pflegen Zähler, die mit seinem JIT-Compiler verbunden sind, aber diese Statistiken sind für Java als solche nicht zugänglich.)
Wenn Sie Referenzzählungen für Ihre eigenen Objekte beibehalten möchten, werden Sie das tun muss es manuell tun. Es ist wahrscheinlich ein fehleranfälliges Geschäft:
%Vor%Sie könnten ein selbst erzwungenes "Protokoll" einrichten, das diese Art erfordert um jede Verwendung eines MyObject herum, aber es wäre ungeschickt und alles zu leicht, um falsch zu liegen. Und nicht alle Situationen sind so einfach wie die oben genannte: Zum Beispiel, wenn Sie zwei Referenzen haben, deren Lebensdauern Überlappen, aber nicht verschachteln, können Sie sie nicht mit den lexikalischen Bereichen von übereinstimmen versuche / endlich so sauber.
Das Collections-Framework wäre zumindest tabu sehr schwer zu benutzen. Wenn Sie ein MyObject in eine SortedMap einfügen, z Beispiel, wie viele Verweise auf das MyObject in der Map beibehalten werden? Ist die Antwort davon abhängig, ob das MyObject als Schlüssel oder als verwendet wird? Wert oder beides? Es scheint mir, dass Ihre Chancen, eine genaue Anzahl sind dünn.
Machen Sie einen Schritt zurück: WARUM wollen Sie diese Referenz zählt? Welcher Sinn versuchst du zu erfüllen? Möglicherweise gibt es einen besseren Weg, um Ihr Ziel zu erreichen Gesamtstrategie als diese sehr schwierige Taktik zu verfolgen.
Wenn Sie diese Informationen wirklich benötigen, lösen Sie einen Javacore-Dump aus und analysieren Sie dann die darin enthaltenen Informationen. Aber außer Sie haben ein bestimmtes Problem, das Sie beheben möchten, wie zum Beispiel ein "Speicherleck", benötigen Sie wahrscheinlich nicht diese Informationen.
Die Frage konnte nur von einer VM beantwortet werden, die einen generationsübergreifenden Stop-the-world-Garbage-Collector besitzt. Die JVM benötigt keinen solchen Garbage Collector, also, nein, das ist nicht möglich.
Auch bei einem solchen GC dürfen verschiedene Threads Kopien von nichtflüchtigen Feldern behalten. Das könnte die Anzahl der Referenzen verwechseln, die Sie finden würden, wenn Sie den Live-Objekt-Graphen auf der Suche nach einem bestimmten Objekt durchgehen.
In Netbeans können Sie mithilfe der Funktion "Usage suchen" feststellen, wo innerhalb eines bestimmten Projekts auf eine bestimmte Klasse verwiesen wurde.
Wählen Sie im Projektexplorer die Klasse und klicken Sie mit der rechten Maustaste - & gt; Nutzungen finden.