Module jdk.attach

Class AttachProvider

java.lang.Object
com.sun.tools.attach.spi.AttachProvider

public abstract class AttachProvider extends Object
附加提供程序类,用于连接到Java虚拟机。

附加提供程序是此类的具体子类,具有零参数构造函数并实现下面指定的抽象方法。

附加提供程序实现通常与Java虚拟机实现、版本甚至操作模式相关联。也就是说,特定的提供程序实现通常只能连接到特定的Java虚拟机实现或版本。例如,Oracle的JDK实现附带了只能连接到Oracle的HotSpot虚拟机的提供程序实现。通常情况下,如果一个环境包含不同版本和不同供应商的Java虚拟机,则将为每个实现或版本系列提供一个附加提供程序实现。

附加提供程序由其名称和类型标识。名称通常是与VM供应商对应的名称,但不一定要求如此。例如,Oracle JDK实现附带了使用包名称"sun"(出于历史原因)的附加提供程序。类型通常对应于附加机制。例如,使用Doors进程间通信机制的实现可能使用类型"doors"。名称和类型的目的是在存在多个安装的提供程序的环境中标识提供程序。

在第一次调用providers方法时加载和实例化AttachProvider实现。此方法尝试加载平台上安装的所有提供程序实现。

此类中的所有方法都可以安全地供多个并发线程使用。

自 JDK 版本:
1.6
  • Constructor Details

    • AttachProvider

      protected AttachProvider()
      初始化此类的新实例。
      抛出:
      SecurityException - 如果已安装安全管理器并且拒绝了AttachPermission("createAttachProvider")
  • Method Details

    • name

      public abstract String name()
      返回此提供程序的名称。
      返回:
      此提供程序的名称
    • type

      public abstract String type()
      返回此提供程序的类型。
      返回:
      此提供程序的类型
    • attachVirtualMachine

      public abstract VirtualMachine attachVirtualMachine(String id) throws AttachNotSupportedException, IOException
      连接到Java虚拟机。

      Java虚拟机由一个抽象标识符标识。此标识符的性质取决于平台,但在许多情况下,它将是进程标识符(或 pid)的字符串表示形式。

      此方法解析标识符并将标识符映射到Java虚拟机(以实现相关的方式)。如果提供程序无法解析标识符,则会抛出AttachNotSupportedException。解析后,此方法尝试连接到Java虚拟机。如果提供程序检测到标识符对应于不存在的Java虚拟机,或者对应于不支持此提供程序实现的附加机制的Java虚拟机,或者检测到Java虚拟机是此提供程序无法连接的版本,则会抛出AttachNotSupportedException。

      参数:
      id - 标识Java虚拟机的抽象标识符。
      返回:
      表示目标虚拟机的VirtualMachine。
      抛出:
      SecurityException - 如果已安装安全管理器并且拒绝了AttachPermission("attachVirtualMachine"),或实现所需的其他权限。
      AttachNotSupportedException - 如果无法解析标识符,或者它对应于不存在的Java虚拟机,或者它对应于此提供程序无法连接的Java虚拟机。
      IOException - 如果发生其他I/O错误
      NullPointerException - 如果idnull
    • attachVirtualMachine

      连接到Java虚拟机。

      可以使用VirtualMachineDescriptor描述Java虚拟机。此方法调用描述符的provider()方法来检查它是否等于此提供程序。然后尝试连接到Java虚拟机。

      参数:
      vmd - 虚拟机描述符
      返回:
      表示目标虚拟机的VirtualMachine。
      抛出:
      SecurityException - 如果已安装安全管理器并且拒绝了AttachPermission("attachVirtualMachine"),或实现所需的其他权限。
      AttachNotSupportedException - 如果描述符的provider()方法返回不是此提供程序的提供程序,或者它不对应于此提供程序可以连接的Java虚拟机。
      IOException - 如果发生其他I/O错误
      NullPointerException - 如果vmdnull
    • listVirtualMachines

      public abstract List<VirtualMachineDescriptor> listVirtualMachines()
      列出此提供程序已知的Java虚拟机。

      此方法返回一个VirtualMachineDescriptor元素列表。每个VirtualMachineDescriptor描述了此提供程序可能连接的Java虚拟机。不能保证对列表中每个描述符调用attachVirtualMachine都会成功。

      返回:
      描述此提供程序已知的Java虚拟机的虚拟机描述符列表(可能为空)。
    • providers

      public static List<AttachProvider> providers()
      返回已安装的附加提供程序列表。

      如果在平台上安装了AttachProvider,则满足以下条件:

      • 它安装在对AttachProvider类型的定义类加载器可见的JAR文件中(通常是系统类加载器)。
      • JAR文件包含一个名为com.sun.tools.attach.spi.AttachProvider的提供程序配置,位于资源目录META-INF/services中。
      • 提供程序配置文件列出了AttachProvider实现的完全限定类名。

      提供程序配置文件的格式是每行一个完全限定类名。忽略每个类名周围的空格和制表符,以及空行。注释字符为'#'(0x23),在每行上,第一个注释字符后的所有字符都将被忽略。文件必须使用UTF-8编码。

      AttachProvider实现在第一次调用此方法时加载和实例化(使用零参数构造函数)。第一次调用此方法返回的列表是提供程序列表。后续调用此方法将返回相同提供程序列表。列表是不可修改的。

      返回:
      已安装的附加提供程序列表。