JDK.attach 包解析

JDK.attach允许本地进程通信,附加到目标JVM并加载工具代理。本文深入探讨其实现原理,包括内存dump、线程dump等功能,并详细分析VirtualMachine类、AttachPermission和AttachProvider等关键组件。
摘要由CSDN通过智能技术生成

–> go to 总目录


和JVM通信,发送指令请求

一、描述

JDK6开始引入,除了Solaris平台的Sun JVM支持远程的Attach,在其他平台都只允许Attach到本地的JVM上。

用Java语言编写的工具使用此API附加到目标虚拟机(VM),并将其tool agent 加载到目标VM中。

什么是attach机制?

说简单点就是jvm提供一种jvm进程间通信的能力,能让一个进程传命令给另外一个进程,并让它执行内部的一些操作,比如说我们为了让另外一个jvm进程把线程dump出来,那么我们跑了一个jstack的进程,然后传了个pid的参数,告诉它要哪个进程进行线程dump,既然是两个进程,那肯定涉及到进程间通信,以及传输协议的定义,比如要执行什么操作,传了什么参数等

涉及进程间通信。启动Attach Listener进程和VM进程通信。交换数据的方式使用的是SOCKET
约束
除了 Attach API规定的API功能。还依赖针对JVM的具体实现,如果jvm嗯实现不支持,api也没有用。

功能

  • 内存dump
  • 线程dump
  • 类信息统计(比如加载的类及大小以及实例个数等)
  • 动态加载agent
  • 动态设置vm flag(但是并不是所有的flag都可以设置的,因为有些flag是在jvm启动过程中使用的,是一次性的)
  • 打印vm flag
  • 获取系统属性等

二、实现原理

能够说明ATTCH的作用,也提供更高阶,更细致的分析。

概括性文档

详细流程分析

说简单点就是jvm提供一种jvm进程间通信的能力,能让一个进程传命令给另外一个进程,并让它执行内部的一些操作,比如说我们为了让另外一个jvm进程把线程dump出来,那么我们跑了一个jstack的进程,然后传了个pid的参数,告诉它要哪个进程进行线程dump&#

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值