我做了一個簡單的庫來測量給定對象的大小。該庫是通過JNI從Java類訪問的 。它專門爲Hotspot設計,因此它使用JVMTI並調用GetObjectSize
。使用System.load和庫設置爲代理
我的問題是,有什麼更好的解決方案?
要裝入使用
System.load("library")
或設置庫作爲代理,並明確地通過發出帶有代理信息選項java命令裝載它的庫。
我見過
所有類似的例子至今使用的代理功能:
以何種方式是,不僅僅是加載庫更高效?
謝謝!
我做了一個簡單的庫來測量給定對象的大小。該庫是通過JNI從Java類訪問的 。它專門爲Hotspot設計,因此它使用JVMTI並調用GetObjectSize
。使用System.load和庫設置爲代理
我的問題是,有什麼更好的解決方案?
要裝入使用System.load("library")
或
設置庫作爲代理,並明確地通過發出帶有代理信息選項java命令裝載它的庫。
所有類似的例子至今使用的代理功能:
以何種方式是,不僅僅是加載庫更高效?
謝謝!
命令行注入的優點是代理與虛擬機一起加載。您可以在不修改程序的情況下將代理注入到每個Java程序中。與System.load
,這在調用點完成。您可以對更大的一組回調作出反應,例如有一個VM Initialization Event。如果您使用System.load
該事件已過。
因此,我不認爲使用命令行注入更加高效,但對某些用例更有效。
對不起,一年遲來的答案檢查。感謝您的解釋。我結束了使用庫函數,因爲在我的情況下,使用庫來計算對象內存消耗,代理提供了最小的優勢。 – Paul
爲什麼你需要這個?你爲什麼不使用內存分析器來查找對象的大小? – Cratylus
內存分析器將太重。我正在努力擴展一個對methodes/classes進行正式堆分析的工具。公式取決於類實例的大小。現在,這個大小被正式提及,如(Sizeof String實例)或(Sizeof Object實例)。我想要做的是專門針對每個JVM實現。基本上,用實際數字替換條款。對於一個虛擬機實施已經有了專業化。該計劃是爲各種虛擬機添加專業化。 – Paul