- java.lang.Object
-
- com.sun.tools.attach.spi.AttachProvider
-
public abstract class AttachProvider extends Object
附加提供程序类以附加到Java虚拟机。附加提供者是这个类的具体子类,它具有零参数的构造函数,并实现下面指定的抽象方法。
附加提供商实现通常与Java虚拟机实现,版本或甚至操作模式相关联。 也就是说,特定的提供者实现通常只能附加到特定的Java虚拟机实现或版本。 例如,Sun的JDK实现随附提供者实现,只能附加到Sun的HotSpot虚拟机。 一般来说,如果环境由不同版本的Java虚拟机和不同的供应商组成,那么每个实现或版本系列都将有一个附加提供程序实现。
附件提供商由其
name
和type
标识 。 该名称通常是但不是必须是与VM供应商对应的名称。 例如,Sun JDK实现附带使用名称为“sun”的附加提供程序。 该类型通常对应于附接机制。 例如,使用门进程间通信机制的实现可能使用类型“门” 。 名称和类型的目的是在安装了多个提供程序的环境中识别提供程序。在第一次调用
providers
方法时,AttachProvider实现被加载和实例化。 此方法尝试加载安装在平台上的所有提供程序实现。此类中的所有方法都可以安全地被多个并发线程使用。
- 从以下版本开始:
- 1.6
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 protected
AttachProvider()
初始化此类的新实例。
-
方法摘要
所有方法 静态方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 VirtualMachine
attachVirtualMachine(VirtualMachineDescriptor vmd)
附加到Java虚拟机。abstract VirtualMachine
attachVirtualMachine(String id)
附加到Java虚拟机。abstract List<VirtualMachineDescriptor>
listVirtualMachines()
列出此提供程序已知的Java虚拟机。abstract String
name()
返回此提供商的名称。static List<AttachProvider>
providers()
返回已安装附件提供商的列表。abstract String
type()
返回此提供商的类型。
-
-
-
构造方法详细信息
-
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虚拟机。 如果提供程序检测到标识符对应于不存在的Java虚拟机,或者对应于不支持此提供程序实现的附加机制的Java虚拟机,或者它检测到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
public abstract List<VirtualMachineDescriptor> listVirtualMachines()
列出此提供程序已知的Java虚拟机。此方法返回
VirtualMachineDescriptor
元素的列表。 每个VirtualMachineDescriptor
描述了该提供程序可能附加到的Java虚拟机。 没有任何保证在列表中的每个描述符上调用attachVirtualMachine
将成功。- 结果
- 描述此提供程序已知的Java虚拟机的虚拟机描述符列表(可能为空)。
-
providers
public static List<AttachProvider> providers()
返回已安装附件提供商的列表。如果以下情况,则在Platform平台上安装AttachProvider:
- 它被安装在一个JAR文件是将AttachProvider类型的定义类装载程序可见的(通常,但不是必需的,
system class loader
)。 - JAR文件包含资源目录
META-INF/services
名为com.sun.tools.attach.spi.AttachProvider
的提供程序配置。 - 提供者配置文件列出了AttachProvider实现的全限定类名。
提供程序配置文件的格式是每行一个完全限定的类名。 围绕每个类名称的空格和制表符字符以及空白行都将被忽略。 注释字符为
'#'
(0x23
),并且在每行上,忽略第一个注释字符后面的所有字符。 文件必须以UTF-8编码。在首次调用此方法时,AttachProvider实现将被加载和实例化(使用零参数构造函数)。 第一次调用此方法返回的列表是提供程序列表。 此方法的后续调用返回相同提供程序的列表。 该列表是不可修改的。
- 结果
- 已安装附件提供商的列表。
- 它被安装在一个JAR文件是将AttachProvider类型的定义类装载程序可见的(通常,但不是必需的,
-
-