附加提供程序是此类的具体子类,它具有零参数构造方法并实现下面指定的抽象方法。
附加提供程序实现通常与 Java 虚拟机实现、版本甚至操作模式相关联。也就是说,特定的提供者实现通常只能附加到特定的 Java 虚拟机实现或版本。例如,Oracle 的 JDK 实现附带了只能附加到 Oracle 的提供程序实现HotSpot虚拟机。一般来说,如果一个环境由不同版本和来自不同供应商的 Java 虚拟机组成,那么每个虚拟机都会有一个附加提供程序实现家庭实现或版本。
附加提供程序由其 name 和 type 标识。这name通常(但不是必须)是与 VM 供应商相对应的名称。例如,Oracle JDK 实现附带使用包名称的附加提供程序“太阳”(由于历史原因)。这type通常对应于附加机制。例如,使用 Doors 进程间通信机制的实现可能使用类型“门”.名称和类型的目的是在安装了多个提供程序的环境中识别提供程序。
AttachProvider 实现在第一次调用 providers 方法时加载和实例化。此方法尝试加载平台上安装的所有提供程序实现。
此类中的所有方法都可以安全地供多个并发线程使用。
- 自从:
- 1.6
-
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述附加到 Java 虚拟机。abstract VirtualMachine附加到 Java 虚拟机。abstract List<VirtualMachineDescriptor>列出此提供程序已知的 Java 虚拟机。abstract Stringname()返回此提供者的名称。static List<AttachProvider>返回已安装附加提供程序的列表。abstract Stringtype()返回此提供者的类型。
-
构造方法详细信息
-
AttachProvider
protected AttachProvider()初始化此类的新实例。- 抛出:
SecurityException- 如果安装了安全管理器并且它拒绝AttachPermission("createAttachProvider")
-
-
方法详情
-
name
返回此提供者的名称。- 返回:
- 该提供商的名称
-
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- 如果id是null
-
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- 如果vmd是null
-
listVirtualMachines
列出此提供程序已知的 Java 虚拟机。此方法返回
VirtualMachineDescriptor元素的列表。每个VirtualMachineDescriptor都描述了一个 Java 虚拟机,该提供者可以访问该虚拟机潜在地附。无法保证对列表中的每个描述符调用attachVirtualMachine都会成功。- 返回:
- 描述此提供者已知的 Java 虚拟机的虚拟机描述符列表(可能为空)。
-
providers
返回已安装附加提供程序的列表。如果出现以下情况,平台上将安装 AttachProvider:
- 它安装在一个 JAR 文件中,该文件对 AttachProvider 类型的定义类加载器可见(通常,但不一定是
system class loader)。 - JAR 文件在资源目录
META-INF/services中包含一个名为com.sun.tools.attach.spi.AttachProvider的提供程序配置。 - 提供者配置文件列出了 AttachProvider 实现的全限定类名。
提供者配置文件的格式是每行一个完全限定的类名。每个类名称周围的空格和制表符以及空行都将被忽略。注释字符是
'#'(0x23),在每一行中第一个注释字符之后的所有字符都将被忽略。该文件必须以 UTF-8 编码。AttachProvider 实现在第一次调用此方法时加载并实例化(使用零参数构造方法)。第一次调用此方法返回的列表是提供者列表。此方法的后续调用返回相同提供者的列表。该列表是不可修改的。
- 返回:
- 已安装附加提供程序的列表。
- 它安装在一个 JAR 文件中,该文件对 AttachProvider 类型的定义类加载器可见(通常,但不一定是
-