有沒有辦法以編程方式從C++獲取當前的jvm統計信息,例如加載的類或當前堆大小?我知道有很多工具可以這樣做,但我想將它與不時讀取這些統計數據的另一個應用程序集成在一起。從C++監視jvm堆大小
回答
JVMTI使您可以將本地代理連接到一個Java應用程序,與像堆遍歷,同時還包括「垃圾收集開始」 &「垃圾收集完成」事件,低層次功能的負載可能作爲出發點。
JNI允許您從本機代碼(反之亦然)調用Java函數。我可以想象,您可以使用此技術從ManagementFactory或某些提供所需信息的類似Java類獲取信息。 This post包含了一個關於如何通過JNI調用靜態Java方法的完整示例,這應該是一個很好的起點。
JVMTI代理需要由jvm加載。似乎不可能將它稍後附加到jvm上。 是不是使用java代碼從jvm中獲取信息有點傻?您正在爲jvm加載更多東西。你是在干擾監視? –
@LL .:您可以使用'com.sun.tools.attach.VirtualMachine'使用tools.jar將JVMTI代理附加到正在運行的JVM,請看這裏:http://docs.oracle.com/javase/6 /docs/jdk/api/attach/spec/com/sun/tools/attach/VirtualMachine.html。 問題是,您需要另一個Java程序來將您的本地代理連接到正在運行的JVM,還沒有找到一個解決方案尚未直接從本機代碼連接到JVM。 –
在[我自己的問題之一](http://stackoverflow.com/questions/38588632/attach-native-application-via-jni-to-already-running-jvm-on-linux),apangin只是建議我他項目[jattach](https://github.com/apangin/jattach),它看起來很有希望從本機代碼附加到正在運行的JVM。 –
- 1. Cassandra緩存大小和JVM堆大小
- 2. 從maven構建jvm堆大小錯誤
- 3. Weka(jvm)改變堆大小
- 4. 更改jvm堆大小 - jgrasp
- 5. Linux上的JAVA堆大小監視
- 6. JVM最小堆大小推薦原因?
- 7. 預留Java JVM最大堆大小
- 8. 監視WebSphere JVM
- 9. 如何從JVM獲取堆和permgen的最大大小?
- 10. 增加JVM中的堆大小
- 11. 在JAR中指定JVM堆大小
- 12. 瞭解JVM堆大小(使用Eclipse時)
- 13. 如何增加Groovy的JVM堆大小?
- 14. Android中JVM的堆大小爲
- 15. 增加Scala的JVM堆大小?
- 16. 關於增加JVM的堆大小
- 17. JVM堆大小動物園管理員
- 18. 如何增加JVM堆大小YouTrack 5.1
- 19. VMware客戶機中的JVM堆大小
- 20. 爲什麼我的JVM堆大小從2gigs到8g演出?
- 21. 在Visual Studio中監視調用堆棧大小
- 22. 在JVM中監視線程
- 23. 使用SNMP監視JVM
- 24. 爲什麼要減小Java JVM線程堆棧的大小?
- 25. Java虛擬機「最大堆大小」與通用JVM參數Xmx
- 26. 如何設置風暴工人的JVM最大堆大小?
- 27. 的Java Webstart的最大堆大小導致JVM無法啓動
- 28. JVM最大堆大小可以動態變化嗎?
- 29. 瞭解最大JVM堆大小 - 32位和64位
- 30. 在MAC OSX中增加JVM最大堆大小10.12
所以從C++運行那些其他工具並收集輸出? (如果你在正常的* NIX世界)(不回答,只是可能的解決方法) – Ped7g
大多數工具都是基於GUI的,沒有命令行選項。它們似乎是用swing或者其他東西在java中構建的。 –
['jstat'](https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html)是一個用於監控堆,gc,類加載和JIT編譯的命令行工具。 ['jcmd'](https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr006.html)'PerfCounter.print'也可能有所幫助。 – apangin