Arthas是一个功能很是强大的诊断工具,功能点不少,例如:jvm信息、线程信息、搜索类中的方法、跟踪代码执行、观测方法的入参和返回参数等等。java
做为有追求的程序员,你不只要知道它能作什么,更要思考它是是如何作到的。在这以前你可能还须要了解一些额外的知识,例如ava SE 5中增长的特性Instrumentation、ASM字节码加强技术。 程序员
Instrumentation把 Java的instrument 功能从本地代码中解放出来,使之能够用Java代码的方式解决问题。使用 Instrumentation,开发者能够构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在 JVM 上的程序,甚至可以替换和修改某些类的定义。Instrumentation是Java SE 5中的新特性。在SE 5中只能在运行前进行加载,在SE 6中实现可以在运行时加载。例如java -javaagent: agent.jar -jar agent-demo.jarASM是一个java字节码操纵框架,它能被用来动态生成类或者加强既有类的功能。ASM 能够直接产生二进制 class 文件,也能够在类被加载入 Java 虚拟机以前动态改变类行为。Java class 被存储在严格格式定义的 .class文件里,这些类文件拥有足够的元数据来解析类中的全部元素:类名称、方法、属性以及 Java 字节码(指令)。ASM从类文件中读入信息后,可以改变类行为,分析类信息,甚至可以根据用户要求生成新类。asm字节码加强技术主要是用来反射的时候提高性能的,若是单纯用jdk的反射调用,性能是很是低下的,而使用字节码加强技术后反射调用的时间已经基本能够与直接调用至关。 app
ASM相对于其余相似工具如BCEL、SERP、Javassist、CGLIB,它的最大的优点就在于其性能更高,其jar包仅30K。Hibernate和Spring都使用了cglib代理,而cglib自己就是使用的ASM,可见ASM在各类开源框架都有普遍的应用。 框架
ASM框架中的核心类有如下几个: jvm
① ClassReader:该类用来解析编译过的class字节码文件。 工具
② ClassWriter:该类用来从新构建编译后的类,好比说修改类名、属性以及方法,甚至能够生成新的类的字节码文件。 性能
③ ClassAdapter:该类也实现了ClassVisitor接口,它将对它的方法调用委托给另外一个ClassVisitor对象。spa