Gibt es eine Möglichkeit, die aktuellen jvm-Statistiken wie geladene Klassen oder aktuelle Heap-Größe aus C++ programmgesteuert abzurufen? Ich weiß, dass es viele Tools dafür gibt, aber ich möchte das mit einer anderen Anwendung integrieren, die diese Statistiken von Zeit zu Zeit lesen würde.Monitor-JVM-Heap-Größe von C++
Antwort
Sie können sich JVMTI und JNI ansehen.
JVMTI können Sie einen nativen Agenten auf eine Java-Anwendung befestigen, mit Lasten von Low-Level-Funktionen wie Heap-Überquerungen, usw. Es ist auch „Garbage Collection Start“ & „Garbage Collection Finish“ Ereignisse enthält, die geeignet sind, als Startpunkte verwendet werden.
JNI können Sie Java-Funktionen von nativem Code (und umgekehrt) aufrufen. Ich könnte mir vorstellen, dass Sie diese Technik verwenden könnten, um Informationen von ManagementFactory oder einer ähnlichen Java-Klasse zu erhalten, die die benötigten Informationen liefert. This post enthält ein vollständiges Beispiel, wie man statische Java-Methoden über JNI aufruft, was ein guter Ausgangspunkt sein sollte.
Der JVMTI-Agent muss vom JVM geladen werden. Es scheint nicht möglich, es später an den jvm anzuhängen. Verwendet nicht Java-Code, um Informationen aus dem JVM ein wenig albern zu bekommen? Sie fügen mehr Dinge für den jvm hinzu, um sie dann zu laden. Sie überwachen dann intrusiv? –
@LL .: Sie können einen JVMTI-Agenten an eine laufende JVM mit 'com.sun.tools.attach.VirtualMachine' über tools.jar anhängen, schauen Sie hier nach: http://docs.oracle.com/javase/6 /docs/jdk/api/attach/spec/com/sun/tools/attach/VirtualMachine.html. Das Problem ist, dass Sie ein anderes Java-Programm benötigen, um Ihren nativen Agenten an die laufende JVM anzuhängen. Sie haben noch keine Lösung gefunden, um eine JVM direkt aus dem systemeigenen Code zu erstellen. –
Auf [eine meiner eigenen Fragen] (http://stackoverflow.com/questions/38588632/attach-native-application-via-jni-to-already-running-jvm-on-linux), schlug Apangin nur mir seine vor Projekt [jattach] (https://github.com/apangin/jattach), das vielversprechend aussieht, um eine laufende JVM aus nativem Code anzuhängen. –
- 1. von C++ zu C#
- 2. C# Scripting von C++?
- 3. Steuern von Firefox von C/C++
- 4. Aufruf von Visual C++ - Code von C#
- 5. Aufruf von C# aus C
- 6. Aufruf C++ Funktion von C#
- 7. Mischen von C/C++ - Bibliotheken
- 8. C# -Äquivalent von C sscanf
- 9. C# von C++ aufrufen, Rückgabewert
- 10. Call C++ - Bibliothek von C#
- 11. C-Äquivalent von C++ STL
- 12. Ruftaste C++ Funktionszeiger von C#
- 13. Interop Zeichenfolge von C# C++
- 14. Aufruf C++ Methoden von C
- 15. C# -Äquivalent von OBJ-C
- 16. Quelltext von c/C++ Funktionen
- 17. Kombinieren von C++ und C#
- 18. Aufruf von Python von C#
- 19. Anschluss von Ingres von C
- 20. Ausführen von Latex von C#
- 21. C-Version von C++ std :: map
- 22. Rückruf von C++ zu Ziel c
- 23. Möglich, C++ - Code von C# aufzurufen?
- 24. Umschreiben von C++ - Methoden in C
- 25. C/C++ Implementierung von Simplex-Methode
- 26. Zuordnung von Modbus-Registeradresse mit C/C++
- 27. Übergabe von C++ Lambda an C-Funktionen
- 28. PHP-kompatible Serialisierung von C/C++
- 29. Konvertieren eines Projekts von C++ in C#
- 30. Handhabung Array zurückgegeben von C++ dll C#
also von C++ diese anderen Tools ausführen und Ausgabe sammeln? (wenn Sie in normalen * NIX-Welt sind) (nicht beantworten, nur Workaround möglich) – Ped7g
Die meisten Tools sind GUI-basiert mit keine Befehlszeilenoptionen. Sie scheinen in Java mit Swing oder so gebaut zu sein. –
['jstat'] (https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html) ist ein Befehlszeilentool zur Überwachung von Heap-, GC-, Klassenlade- und JIT-Kompilierung . ['jcmd'] (https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr006.html)" PerfCounter.print "kann ebenfalls helfen. – apangin