文档章节

Javaagent Introduction

OrangeJoke
 OrangeJoke
发布于 05/04 11:34
字数 517
阅读 6
收藏 0

问题: javaagent 可以做什么?

可以在加载class文件之前做拦截把字节码做修改 可以在运行期将已经加载的类的字节码做变更,但是这种情况下会有很多的限制,后面会详细说 还有其他的一些小众的功能: 获取所有已经被加载过的类 获取所有已经被初始化过了的类(执行过了clinit方法,是上面的一个子集) 获取某个对象的大小 将某个jar加入到bootstrapclasspath里作为高优先级被bootstrapClassloader加载 将某个jar加入到classpath里供AppClassloard去加载 设置某些native方法的前缀,主要在查找native方法的时候做规则匹配

如何获取Instrument的示例?

public static void premain(String agentArgs, Instrumentation inst);
public static void agentmain(String agentArgs, Instrumentation inst);

为什么需要从agent里获取Instrument的实例?

看下Instrument 的实现类InstrumentIml 构造函数是私有的,另外这个类在rt.jar下面,会被系统加载器加载; 让后就会执行:


/**
* Loads the native library specified by the <code>libname</code>
* argument.
*/
 static {
        System.loadLibrary("instrument");
    }

现在知道的,这个实现类里的native方法是由 “instrument” 本地库实现的。 但是还是不知道怎么实例化的InstrumentImpl.我们猜测是由JNI来创建java实例的。问题又来了,native 内存是怎么分配的,如果分配到堆外要怎么访问呢?

javaagent的class是怎么加载的? The system class loader ( ClassLoader.getSystemClassLoader) must support a mechanism to add an agent JAR file to the system class path.

native 方法是如何执行的? 调用本地库

那我们从JVMTI里找答案。 IBM JMTI

最后是why?

参考:

Instrument interface

ClassFileTransformer

java jar file

java agent

JVMTI

© 著作权归作者所有

OrangeJoke
粉丝 40
博文 57
码字总数 39185
作品 0
江北
高级程序员
私信 提问
【JAVA基础☞探针技术】Java探针-Java Agent技术

1、原理:基于javaAgent和Java字节码注入技术的java探针工具技术原理 2、原理分析 动态代理功能实现说明,我们利用javaAgent和ASM字节码技术开发java探针工具,实现原理如下: jdk1.5以后引入...

卯金刀GG
06/26
191
0
Centos7 MyPerf4J安装配置及可视化页面

Centos7 MyPerf4J安装配置及可视化页面 一个针对高并发、低延迟应用设计的高性能 Java 性能监控和统计工具。MyPerf4J 采用 JavaAgent 配置方式,透明化接入应用,对应用代码完全没有侵入。 ...

lwenhao
03/01
76
0
分享一个 pycharm 专业版的永久使用方法

刚开始接触Python,首先要解决的就是Python开发环境的搭建。 目前比较好用的Python开发工具是PyCharm,他有社区办和专业版两个版本,但是社区版支持有限,我们既然想好好学python,那肯定得用...

上海小胖
09/18
72
0
JVM源码分析之javaagent原理完全解读

概述 本文重点讲述javaagent的具体实现,因为它面向的是我们Java程序员,而且agent都是用Java编写的,不需要太多的C/C++编程基础,不过这篇文章里也会讲到JVMTIAgent(C实现的),因为javaage...

明舞
2016/02/16
174
0
现在有两个docker容器,一个容器安装java探针,想植入另外一个docker容器里,监控docker里面的java程序

docker宿主机上一个两个镜像,javaagent镜像和tomcat镜像。启动javaagent镜像后,在启动tomcat镜像的时候,启动Java镜像的探针能植入到tomcat的容器内...

heyou1986
2018/11/20
314
0

没有更多内容

加载失败,请刷新页面

加载更多

XXL-JOB使用命令行的方式启动python时,日志过多导致阻塞的解决方式

一、Runtime.getRuntime().exec()的阻塞问题 这个问题也不能算是XXL-JOB的问题,而是Java的Runtime.getRuntime().exec()造成的,BufferedReader的缓冲区大小有限,当不能及时从缓冲区中把输出...

codeobj
6分钟前
1
0
java后端获取字符串标签里面的具体值

1、如下:怎么获取value值,使用Jsoup解决 <select id='department' name='department' class='select' tabindex='6' onchange='changeDept()'><option value=''>院系</optio......

木九天
13分钟前
2
0
Xamarin图表开发基础教程(10)OxyPlot框架支持的图表类型

Xamarin图表开发基础教程(10)OxyPlot框架支持的图表类型 OxyPlot组件支持26种图表,这些图表按照功能和样式可以分为4大类,分别为线型图表、条型图表、金融图表和其它图表。 线型图表 OxyP...

大学霸
16分钟前
2
0
移动端input“输入框”常见问题及解决方法

移动端input“输入框”常见问题及解决方法 1. ios中,输入框获得焦点时,页面输入框被遮盖,定位的元素位置错乱: 当页input存在于吸顶或者吸底元素中时,用户点击输入框,输入法弹出后,fie...

tyou
18分钟前
2
0
初探Android线程池

前言 最近在看OkHttp的源码,看的时候发现有关线程池的运用,自己就仔细想了一下,这个块知识好像不是很牢固。没办法,再研究一下有关线程池的相关知识吧。学习就是一个查漏补缺的过程,最终...

二营长的意大利炮手
25分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部