模块 jdk.attach

类 AttachProvider

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

public abstract class AttachProvider extends Object
附加提供程序类以附加到 Java 虚拟机。

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

附加提供程序实现通常与 Java 虚拟机实现、版本甚至操作模式相关联。也就是说,特定的提供者实现通常只能附加到特定的 Java 虚拟机实现或版本。例如,Oracle 的 JDK 实现附带了只能附加到 Oracle 的提供程序实现HotSpot虚拟机。一般来说,如果一个环境由不同版本和来自不同供应商的 Java 虚拟机组成,那么每个虚拟机都会有一个附加提供程序实现家庭实现或版本。

附加提供程序由其 name type 标识。这name通常(但不是必须)是与 VM 供应商相对应的名称。例如,Oracle JDK 实现附带使用包名称的附加提供程序“太阳”(由于历史原因)。这type通常对应于附加机制。例如,使用 Doors 进程间通信机制的实现可能使用类型“门”.名称和类型的目的是在安装了多个提供程序的环境中识别提供程序。

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

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

自从:
1.6
  • 构造方法详细信息

    • AttachProvider

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

    • 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 虚拟机。如果provider检测到该identifier对应的Java虚拟机不存在,或者对应的Java虚拟机不支持该provider实现的attach机制,或者检测到该Java虚拟机的版本为此提供程序无法附加,则抛出 AttachNotSupportedException

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

      public VirtualMachine  attachVirtualMachine(VirtualMachineDescriptor  vmd) throws AttachNotSupportedException , IOException
      附加到 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:

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

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

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

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