Wie finde ich heraus, wie viele Referenzen ein Objekt hat? [Duplikat]

8

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 ...

    
Barry Fruitman 28.01.2014, 04:56
quelle

4 Antworten

4

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.

    
AndyG 28.01.2014, 05:01
quelle
2

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.

    
keshlam 28.01.2014 05:06
quelle
0

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.

    
Mike Samuel 28.01.2014 05:07
quelle
0

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.

    
Arindam Das 28.01.2014 05:07
quelle

Tags und Links