jvm attach api

1. 简介

关于Attach API:
This is a Sun private mechanism that allows an external process to start a thread in HotSpot that can then be used to launch an agent to run in that HotSpot, and to send information about the state of HotSpot back to the external process.

这是Sun私有实现(即不是Jvm标准规范,其他虚拟机不一定有这个能力)。该api的功能是让外部进程可以 在目标JVM(运行被监控、被控制的程序的JVM) 中启动一个线程,该线程会加载运行Agent,然后线程会将本jvm的状态返回给外部进程。

2.主要接口与类

2.1 class VirtualMachine

2.1.1 概述

public abstract class VirtualMachine
extends Object

该类表示将要被“附着的”Java虚拟机,也被称为目标虚拟机(target virtual machine,target vm)。 外部进程(通常来说是外部的监控工具、或是管理控制台,如jconsole,jprofile) 使用该类实例来 将agent 加载到目标虚拟机中。 例如,使用Java编写的profiler工具就会使用VirtaulMachine类实例来加载profiler agent到被监控的jvm中。

通过VirtualMachine的类静态方法attach(string id)来获取代表target vm的VirtaulMachine实例。该方法 id参数一般是arget vm的进程Pid。

另外,也可以 通过 类静态方法 attach(VirtualMachineDescriptor vmd) 来获取一个VirtaulMachine实例( 可以使用静态方法VirtualMachine.list()方法获取一个VirtualMachineDescriptor 列表 )。

当获取到VirtualMachine对象实例后,就可以调用loadAgent,loadAgentLibrary,loadAgentPath方法操作target VM了。

这几个方法的区别:

  1. loadAgent方法用于加载 用Java写的、打包成jar的agent;
  2. loadAgentLibrary 和loadAgentPath 是用于加载基于JVM
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值