我制作了一个简单的库来测量给定对象的大小。该库是通过 Java 类中的 JNI 访问的。它是专门为 Hotspot 设计的,因此它使用 JVMTI 并调用GetObjectSize
.
我的问题是,更好的解决方案是什么?
System.load("library")
使用或 加载库将库设置为代理并通过发出带有代理选项的 java 命令显式加载它。
到目前为止,我看到的所有类似示例都使用了代理功能:
以什么方式比仅仅加载库更有效?
谢谢!
我制作了一个简单的库来测量给定对象的大小。该库是通过 Java 类中的 JNI 访问的。它是专门为 Hotspot 设计的,因此它使用 JVMTI 并调用GetObjectSize
.
我的问题是,更好的解决方案是什么?
System.load("library")
使用或 加载库
将库设置为代理并通过发出带有代理选项的 java 命令显式加载它。
到目前为止,我看到的所有类似示例都使用了代理功能:
以什么方式比仅仅加载库更有效?
谢谢!
命令行注入的优点是代理与虚拟机一起加载。您可以在不修改程序的情况下将代理注入到每个 Java 程序中。System.load
这样就在调用点完成了。您可以对更大的回调集做出反应,例如有一个VM Initialization Event。如果你用System.load
那个事件就过去了。
因此,我不认为使用命令行注入在某些方面会更有效,但对于某些用例来说更有效。