skywalking-JavaAgent介绍
javaagent、skywalking-agent
在了解javaAgent之前我们先了解下Java编译和解释,在带大家了解下代理和agent的区别。
一、计算机语言的执行方式分为编译型和解释型两种
1、编译型语言:指使用专门的编译器,针对特定平台(操作系统)将某种高级语言源代码一次性翻译成可以被该平台硬件执行的机器码(包括机器指令和操作数),并包装成改平台所能识别的可执行性程序的格式,这个转换过程称为编译(Compile)。编译结束后,可能需要对编译好的目标代码进行链接。优点是运行效率高,组装的时候可以实现低层次的代码复用;缺点是不能跨平台。
2、解释型语言:指使用专门的解释器,对源程序逐行解释成特定的平台上的机器码并立即执行的语言。优点是跨平台比较容易,只需要提供特定平台上的解释器即可,每个平台上的解释器负责将源程序解释成特定平台的机器指令。缺点是程序执行效率低,每次执行程序都需要进行一次编译。
那么Java是如何执行的
1、JAVA:先编译后解释(java源文件–javac编译–.class文件/与平台无关的字节码–JVM解释执行–特定平台的机器码)
2、javac编译器不需要面向任何具体的平台,只需要面向JVM,不同平台上JVM是不同的,但这些不同的JVM都提供了相同的接口,从而保证了Java的跨平台性。
案例
如果我们要对一个方法进行浸入可以使用哪些技术。比如我们要对下面代码侵入
public Object targetMethod() {
System.out.println("运行");
}
侵入:运行前暂停一会
1、修改代码
public Object targetMethod() {
Sleep(1000)
System.out.println("运行");
}
2、代理模式
public Object proxy(){
Sleep(1000)
return targetMethod();
}
public Object targetMethod(){
System.out.println("运行");
}
3、AspectJ (其实也是使用的代理)
二、javaagent介绍
javaagent本质上可以理解为一个插件,该插件就是一个精心提供的jar包,这个jar包通过 JVMTI完成加载,最终借助JPLISAgent完成对目标代码的修改。
java agent技术的主要功能如下:
1、可以在加载java文件之前做拦截把字节码做修改
2、可以在运行期将已经加载的类的字节码做变更
四、JavaAgent与动态代理区别
1、ASM, CGlib, Java Proxy, Javassist都是可以操作字节码,但是这些操作字节码都需要等到类加载到JVM中之后,再对字节码进行重写。
2、JavaAgent则是一个可以在加载前就进行重写,然后再加载的方式。
JavaAgent 是JDK 1.5 以后引入的,也可以叫做Java代理。是运行在 main方法之前的拦截器,它内定的方法名叫 premain ,也就是说先执行 premain 方法然后再执行 main 方法。
更多推荐

所有评论(0)