2012-10-30 18 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