当前位置: 首页 > 知识库问答 >
问题:

Java 9上的JavaAgent

田曜瑞
2023-03-14

在java 9之前,监视< code>JavaAgent由< code>boostrapClassloader加载到JVM中,以便被监视的应用程序可以访问它们

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

要访问java.sql之类的其他模块,需要在< code>javaAgent内部进行哪些更改?

共有2个答案

夏昌胤
2023-03-14

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

http://download . Java . net/Java/JDK 9/docs/API/Java/lang/instrument/package-summary . html

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

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

訾高明
2023-03-14

我刚刚在最新版本中验证了这一点

Instrumentation::appendToBootstrapClassLoaderSearch

该类将添加到引导加载程序 (null) 中,并加载到此加载程序的未命名模块中。Java 9,ea-176也是如此。

 类似资料:
  • 我使用jdk9-ea 149并创建了一个示例javafx应用程序 IntelliJ不理解java库,它用红色显示所有的import语句,它们都是灰色的,甚至对于java.util.List和java.util.ArrayList也有同样的问题。 我能够编译外部表单,但不能编译Intellij2016.3.2终极版的代码。 我正在使用实验特性,但它仍然不理解导入语句-请参见下面的intellij设置

  • Java文档可以使用工具生成。 它目前以格式生成文档。 在java 9中,可以通过在命令行参数中使用选项生成格式的文档。 旧式的java文档 考虑F:\worksp\java9文件夹中有一个Java文件:Tester.java,其代码如下 - 可以运行jdk 7 的javadoc工具来生成文档。 使用标志运行jdk 9的javadoc工具以生成新类型的文档。 打开生成的文件,如下所示 -

  • 类是在Java 8中引入的,可以通过设置其值和状态显式来完成。 它可以用作。 它支持未来完成时触发的相关函数和操作。 在Java 9中,CompletableFuture API进一步得到了增强。 以下是对API进行的相关更改。 支持延迟和超时。 改进了对子类的支持。 添加了新的工厂方法。 1. 支持延迟和超时 如果在给定超时之前未完成,则此方法使用给定值完成。 如果在给定的超时之前没有完成,则此

  • 主要内容:takeWhile(Predicate接口),dropWhile(Predicate接口)流(Stream)是在Java中引入的,以帮助开发人员从一系列对象中执行聚合操作。在Java 9中,使用较少的方法就可以使流更好。 takeWhile(Predicate接口) 语法 方法获取所有值直到返回。 在有序流的情况下,它返回一个流,该流包含从此流中匹配给定的元素的最长前缀。 示例 方法获取所有,和值,然后当字符串为空,它将停止执行。 dropWhile(Predicate接口) 语法 方

  • 在负责控制和管理操作系统进程的Java 9 Process API中已经有了相当大的改进。 ProcessHandle类提供进程本机进程ID,开始时间,累计CPU时间,参数,命令,用户,父进程和子进程。 类还提供了检查进程活性并销毁进程的方法。 它具有方法,当进程退出时,类可以异步执行操作。 参考以下实现代码(Tester.java)- 执行上面示例代码,得到以下结果 -

  • REPL代表Read-Eval-Print Loop 。 使用JShell,Java具有功能。 使用REPL,我们可以编写和测试基于java的逻辑,而无需使用javac编译并直接查看计算结果。 运行JShell 打开命令提示符并键入,运行结果如下所示 - 查看JShell命令 当进入命令之后,可键入 来查看中的帮助信息。 运行JShell命令 输入命令并查看当前使用的导入。 在JShell中运行计

  • 主要内容:Java SE 8:Optional类基础,Java SE 8:Optional基本示例,Java SE 9:Optional类改进,Java SE 8样式:Optional方法在这篇文章中,我们将讨论“Java SE 8的类如何解决空检查问题?”以及“Java SE 9的类改进”。 作为Java开发人员,我们知道为了避免错误而对每个对象进行空检查时需要做不少的工作。 Java SE 8:Optional类基础 Oracle公司已经引入了类作为包的一部分。 它是一个容器对象,它可能包含

  • 主要内容:Java9 新功能JAVA 9(aka jdk 1.9)是JAVA编程语言开发的主要版本。 它的最初版本于2017年9月21日发布。Java 9发布的主要目标是 - 使JDK和Java标准版平台模块化,它可以很好地缩小运行在小型计算设备中。 提高JDK和Java实现的整体安全性。 使Java代码库和大型应用程序的构建过程和维护变得轻松,适用于JAVA SE和EE平台。 为Java平台设计和实现一个标准模块系统,可以