Skywalking(java-agent)源码解析(一)

154 阅读1分钟

写在前面

Java Instrumentation API 提供动态修改或增强类的能力,常用于性能分析、日志注入、AOP(面向切面编程)、监控等场景。

核心概念

  1. Instrumentation

    • java.lang.instrument 包中的核心接口。
    • 提供修改类定义和获取 JVM 相关信息的能力。
  2. Agent

    • Java Agent 是一个特殊的 JAR 文件,通过 Instrumentation API 操作字节码。
    • 在 JVM 启动时(通过 premain 方法)或运行时(通过 agentmain 方法)加载。
  3. ClassFileTransformer

    • 用于拦截和修改类的字节码。
    • 开发者可以在类加载前对类的字节码进行操作。
Instrumentation 接口方法
方法名作用
addTransformer(ClassFileTransformer transformer)添加字节码转换器。
redefineClasses(ClassDefinition... definitions)重新定义已经加载的类。
isRedefineClassesSupported()检查是否支持类重定义。
isRetransformClassesSupported()检查是否支持类重新转换。
getAllLoadedClasses()获取 JVM 中所有已加载的类。
getObjectSize(Object obj)获取对象占用的内存大小。
Skywalking源码入口

image.png