阿里開源線上應用調試利器 Arthas的背後

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.jar

ASM是一個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

在線分析診斷工具Arthas簡介及使用線程

相關文章
相關標籤/搜索