Werden Objekte nur erstellt, wenn das Schlüsselwort new
verwendet wird? Wie viele Objekte wurden erstellt, nachdem dieser Code die Kommentare erreicht hat? Ich sage 4 neue Objekte, weil der Konstruktor bei jeder Initialisierung einer Car
new Exception()
aufruft. Wie überprüfe ich die Anzahl der erstellten Objekte?Anzahl der in Java erstellten Objekte ermitteln
Antwort
Es gibt keine (zumindest nicht meines Wissens) automatisierte Art zu zählen, wie viele Objekte in Java erstellt wurden. In Ihrem Beispiel werden jedoch 4 Objekte erstellt, 2 Ausnahmen und zwei Autos.
Wenn Sie zählen möchten, wie viele Objekte für eine bestimmte Klasse vorhanden sind, können Sie einen statischen Zähler haben, der jedes Mal erhöht wird, wenn ein Objekt erstellt wird.
Edit: Sie können erstellte Objekte zählen jmap
verwenden, wie von Andreas wies darauf hin, obwohl es sich um eine nicht sehr praktische Lösung ist
Sie könnten die * Java virtuelle Maschine * ändern, um die Anzahl der malloc-Operationen usw. zu zählen. –
@CommuSoft Sie könnten neu erstellen Das Universum, um einen Apfelkuchen zu backen ...: D –
Das Upgrade der virtuellen Maschine heißt AspectJ oder so. –
Sie jmap
verwenden können und jhat
ein Speicherabbild der JVM zu erhalten.
Das Hinzufügen eines Thread.sleep(20000)
am Kommentar wird das Programm 20 Sekunden warten lassen, damit Sie die folgenden Befehle ausführen können. Erhöhen Sie die Wartezeit, falls erforderlich.
In einer Eingabeaufforderung führen Sie Ihr Programm:
java -cp . Car
In einer anderen Eingabeaufforderung während der die 20 Sekunden warten, laufen
jps
jmap -dump:file=C:/temp/x.dmp 99999
jhat C:/temp/x.dmp
Wo 99999
ist die Prozess-ID in der aufgelisteten Ausgabe von jps
.
Das jhat
Programm startet einen Web-Server auf Port 7000
, so gehen Sie zu:
http://localhost:7000/
Klicken Sie auf "Instanz für alle Klassen zählt (ohne Plattform)", und Sie werden 2 Objekte sehen nur:
2 instances of class Car
Das ist, weil Sie die Exception
Klasse aus dem Display ausgeschlossen haben.
Wenn Sie geklickt haben, auf die „... (einschließlich Plattform)“ -Link, dann würden Sie eine Menge von Objekten, mit so etwas wie dies sehen:
Total of 6214 instances occupying 8071681 bytes.
Wenn Sie eine eigene Ausnahme implementieren, e.q. CarException
und Wurf, der stattdessen Sie erstellt 4 "user" Objekte sehen:
2 instances of class Car
2 instances of class CarException
Also, die Antwort ist richtig? 2, 4 oder 6214?
Wahrscheinlich ist die erwartete Antwort 4, wie in "Wie viele Objekt hat Ihr Programm erstellen?".
Bezüglich Frage, ob Objekte nur erstellt werden, wenn das new
Schlüsselwort verwendet wird, ist die Antwort Nein. Es gibt viele andere Möglichkeiten (zum Beispiel in dieser Antwort aufgeführt: https://stackoverflow.com/a/2103578/5221149), und hier sind ein paar, mit Kommentaren für die Anzahl der Objekte, die von dem Konstrukt erstellt:
// Using "new"
new MyObject() // 1 + number of objects created by constructor
new int[0] // 1
new int[10] // 1
new int[] {1,2,3,4} // 1
new int[10][] // 1
new int[10][20] // 11 (1 outer array + 10 inner arrays)
// Not using "new"
int[] x = {1,2,3,4} // 1
Integer x = 1 // 1 <-- autoboxing
printf("", i, j) // 3 (autobox of i + autobox of j + varargs array)
String x = "a" + i // 3 (StringBuilder + String + array backing String)
Integer[][] x = {{1111},{2222},{3333,4444},{},{}} // 10 (1 outer array + 5 inner arrays + 4 Integers)
- 1. Ermitteln der Anzahl der GDI-Handles und USER-Objekte
- 2. Anzahl der Zeilen in einer Java-Ergebnismenge ermitteln
- 3. Android: Track-Nummer der erstellten Objekte
- 4. Anzahl der Zeilen in JTextPane ermitteln
- 5. Begrenzung der Anzahl der Objekte in NSArrayController
- 6. Count Anzahl der Objekte in der Liste
- 7. Anzahl der serialisierten Objekte in der Datei
- 8. Java set Sicherheitsberechtigung der erstellten Instanzen
- 9. Ermitteln Sie die Anzahl der abzurufenden Elemente
- 10. Ermitteln der Anzahl der printf-Argumente
- 11. NetBeans Anzahl der Swing-Objekte
- 12. Distinct Anzahl spezifischer Objekte in der Liste
- 13. Anzahl der Treffer in einem Dokument (doc) in Lucene ermitteln
- 14. Ermitteln der Anzahl der Zeilen in einem Textfeld in VBA
- 15. Ermitteln der Anzahl der Finger, die beim Gestenereignis verwendet werden
- 16. Ermitteln Sie die Anzahl der Abonnenten pro Thema in JMS
- 17. ein Verfahren, bei statisch erstellten Objekte
- 18. Ermitteln der Anzahl der Frames in einem Core Audio AudioBuffer
- 19. Ermitteln der System-Audiopegel in Java
- 20. AWS-Grenzwert Anzahl der vom Benutzer erstellten EC2s
- 21. Ermitteln Sie die Anzahl der Verbindungen zum Tomcat-Server
- 22. Gibt es eine Möglichkeit, die Anzahl der Objekte zu ermitteln, die erstellt werden?
- 23. Django-Abfragefilter nach Anzahl der ManyToMany-Objekte
- 24. VIM Anzahl/Anzahl der Fehler in Quickfix
- 25. Swift: Anzahl der Schlüssel in einem Verzeichnis ermitteln
- 26. Ermitteln Sie die Anzahl der Zeilen in einem Bereich
- 27. Anzahl der Zeilen in Matrix mit doppelten Zeilen ermitteln
- 28. Wie ermitteln Sie die Anzahl der Methoden der Anwendung?
- 29. So finden Sie die Anzahl der Objekte im Heap
- 30. Anzahl der Maximalwerte von ArrayList Java erhalten
Ist das Hausaufgabe? Ich habe das auf Prüfungen gesehen, bevor ... –
'new' ist nicht die einzige Möglichkeit, Objekte zu erstellen und ist daher kein zuverlässiger Zähler: http://stackoverflow.com/questions/95419/what-are-all -the-different-ways-zu-erstellen-ein-objekt-in-java In deinem Fall funktioniert es aber, ja 4 Objekte sind hier erstellt. – MC10
Die Ausnahme wird wahrscheinlich eine Stack-Trace intern erstellen, die eine beliebige Anzahl von Stack-Trace-Elementen erstellen kann ... –