Java 9上的JavaAgent

时间:2017-07-04 12:55:47

标签: java java-9 jigsaw

在java 9之前,监视JavaAgentboostrapClassloader加载到JVM中,以便受监视的应用程序可以访问它们

使用Java 9模块化体系结构,只有java.base module被加载到Bootstrap类加载器中,因此,Java代理只能访问java.base中的类吗? 默认情况下,它无法访问java.base之外的任何内容吗?

为了访问java.sql等其他模块,需要在javaAgent内进行哪些更改?

2 个答案:

答案 0 :(得分:4)

我刚刚为最新版本和使用

验证了这一点
Instrumentation::appendToBootstrapClassLoaderSearch

该类被添加到引导加载程序(null)并加载到此加载程序的unnamed module中。这适用于Java 9,ea-176。

答案 1 :(得分:1)

以下是JDK 9 EA中java.lang.instrument包描述的链接:

http://download.java.net/java/jdk9/docs/api/java/lang/instrument/package-summary.html

部分"加载代理类和代理类可用的模块/类"应该有助于这里的讨论。

关于java.sql模块,它是几个"非核心"之一。不再定义到引导加载程序的模块。将这些模块移动到平台类加载器意味着它们可以以降低的权限运行,从而有助于平台的整体安全性。这应该对类路径上的应用程序和库完全透明,并且只应通过以下代码来注意:(a)使用-Xbootclasspath / a运行,(b)创建以null作为父级的自定义类,以及(c)代理支持使用Boot-Class-Path属性或appendToBootstrapClassLoaderSearch API将类添加到引导类加载器搜索中。