使用System.load vs library设置为代理

时间:2012-10-30 18:53:34

标签: java jvm jvmti

我制作了一个简单的库来测量给定对象的大小。图书馆是 通过JNI从Java类访问。它专门为Hotspot设计,因此它使用JVMTI并调用GetObjectSize

我的问题是,什么是更好的解决方案?

  1. 使用System.load("library")

  2. 加载库
  3. 将库设置为代理,并通过发出带有代理选项的java命令显式加载它。

  4. 到目前为止,我见过的所有类似例子都使用了代理函数:

    以什么方式比仅加载库更有效?

    谢谢!

1 个答案:

答案 0 :(得分:0)

命令行注入的优点是代理与虚拟机一起加载。您可以将代理注入每个Java程序而无需修改程序。使用System.load,这在调用时完成。您可以对更大的回调集做出反应,例如有一个VM Initialization Event。如果您使用System.load该事件已过去。

因此,我不相信使用命令行注入在某种程度上更有效,但对某些用例更有效。