Java 字节码相关

字节码编程,也就是动态修改或是动态生成 Java 字节码。Java 的字节码相当于汇编,其中的一些细节。

不使用 JVMTI 操作字节码,而是用一些更好用的库。这里有三个库可以比较容易地做这个事。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
  • asmtools - 用于生产环境的 Java .class 文件开发工具。
  • Byte Buddy - 代码生成库:运行时创建 Class 文件而不需要编译器帮助。
  • Jitescript - 和 BiteScript 类似的字节码生成库。

Byte Buddy,在 2015 年还获了 Oracle 的 “Duke’s Choice”大奖,其中说 Byte Buddy 极大地发展了 Java 的技术。

使用字节码编程可以玩出很多高级玩法,最高级的还是在 Java 程序运行时进行字节码修改和代码注入。这个方式使用 Java 这门静态语言在运行时可以进行各种动态的代码修改,而且可以进行无侵入的编程。

Java Agent 的技术。Java Agent 使用的是 “Java Instrumentation API”,其主要方法是实现一个叫 premain()的方法(嗯,一个比 main()函数还要超前执行的 main 函数),然后把你的代码编译成一个 jar 文件。在 JVM 启动时,使用这样的命令行来引入你的 jar 文件:java -javaagent:yourAwesomeAgent.jar -jar App.jar。

更为详细的文章可以参看:“Java Code Geeks: Java Agents”

示例项目:jvm-monitoring-agent 或是 EntryPointKR/Agent.java。

如果想用 ByteBuddy 来玩,你可以看看这篇文章 “通过使用 Byte Buddy,便捷地创建 Java Agent”。

学习如何用 Java Agent 做监控,项目 Stage Monitor。

JVM 相关

Java 底层知识中另一个非常重要的内容——JVM。

JVM 的规格说明书,Java 8 的, The Java Virtual Machine Specification Java SE 8 Edition 。

中文翻译,GitHub Repo - “java-virtual-machine-specification”。

JVM Anatomy Park JVM 解剖公园,带你一点一点地把 JVM 中的一些技术解开。

学习 Java 底层原理还有 Java 的内存模型,官方文章是 JSR 133。还有马里兰大学的威廉·皮尤(William Pugh)教授收集的和 Java 内存模型相关的文献 - The Java Memory Model 。

内存方面两篇文章。

  • The JSR-133 Cookbook for Compiler Writers,解释了怎样实现 Java 内存模型,特别是在考虑到多处理器(或多核)系统的情况下,多线程和读写屏障的实现。
  • Using JDK 9 Memory Order Modes,讲了怎样通过 VarHandle 来使用 plain、opaque、release/acquire 和 volatile 四种共享内存的访问模式,并剖析了底层的原理。

垃圾回收机制 《The Garbage Collection Handbook》,这本书非常全面地介绍了垃圾收集的原理、设计和算法。但是这本书也是相当难啃的。中文翻译《垃圾回收算法手册》

调优垃圾回收, Garbage Collection Tuning Guide ,它是 Hotspot Java 虚拟机的垃圾回收调优指南。

Quick Tips for Fast Code on the JVM 里面有写出更快的 Java 代码的几个小提示。

小结

Java 最黑科技的玩法就是字节码编程,也就是动态修改或是动态生成 Java 字节码。Java 的字节码相当于汇编。

一般不使用 JVMTI 操作字节码,而是用一些更好用的库,如 asmtools、Byte Buddy 和 BiteScript 等。使用字节码编程可以玩出很多高级玩法,其中最高级的玩法是在 Java 程序运行时进行字节码修改和代码注入。

Java Agent 技术更好地实现这种高级玩法。

JVM 也是学习 Java 过程中非常重要的一部分内容。阅读JVM 的规格说明书是系统了解 JVM 规范的最佳文档, JVM Anatomy Park 系列文章,也非常值得一读。

Java 的内存模型和垃圾回收机制,出了如何调优垃圾回收方面的资料。

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄