2012-10-30 43 views
1

我做了一個簡單的庫來測量給定對象的大小。該庫是通過JNI從Java類訪問的 。它專門爲Hotspot設計,因此它使用JVMTI並調用GetObjectSize使用System.load和庫設置爲代理

我的問題是,有什麼更好的解決方案?

  1. 要裝入使用System.load("library")

  2. 設置庫作爲代理,並明確地通過發出帶有代理信息選項java命令裝載它的庫。

  3. 我見過

所有類似的例子至今使用的代理功能:

以何種方式是,不僅僅是加載庫更高效?

謝謝!

+0

爲什麼你需要這個?你爲什麼不使用內存分析器來查找對象的大小? – Cratylus

+1

內存分析器將太重。我正在努力擴展一個對methodes/classes進行正式堆分析的工具。公式取決於類實例的大小。現在,這個大小被正式提及,如(Sizeof String實例)或(Sizeof Object實例)。我想要做的是專門針對每個JVM實現。基本上,用實際數字替換條款。對於一個虛擬機實施已經有了專業化。該計劃是爲各種虛擬機添加專業化。 – Paul

回答

0

命令行注入的優點是代理與虛擬機一起加載。您可以在不修改程序的情況下將代理注入到每個Java程序中。與System.load,這在調用點完成。您可以對更大的一組回調作出反應,例如有一個VM Initialization Event。如果您使用System.load該事件已過。

因此,我不認爲使用命令行注入更加高效,但對某些用例更有效。

+0

對不起,一年遲來的答案檢查。感謝您的解釋。我結束了使用庫函數,因爲在我的情況下,使用庫來計算對象內存消耗,代理提供了最小的優勢。 – Paul