本项目包含了一系列Java高级特性的示例代码,主要涉及Java Agent技术、多线程编程、IO操作等。
src/
├── main/
│ └── java/
│ └── com/
│ └── zhouwy/
│ └── advancedjava/
│ ├── agent/ # Java Agent 相关类
│ │ └── MethodAgentMain.java # Agent 主类
│ ├── concurrency/ # 并发编程相关类
│ │ ├── lock/
│ │ │ ├── ConditionTest.java
│ │ │ └── RenentrantLockTest.java
│ │ ├── forkjoin/
│ │ │ └── forkJoin.java
│ │ └── thread/
│ │ ├── ThreadApp.java
│ │ └── ThreadsInterrupt.java
│ ├── io/ # IO操作相关类
│ │ ├── file/
│ │ │ ├── CharByte.java
│ │ │ ├── FileUtils.java
│ │ │ └── RandAccessFileTests.java
│ │ └── IOTests.java
│ └── demo/ # 示例程序
│ ├── AgentTest.java # Agent 测试类
│ └── AttachMain.java # Attach 示例类
项目演示了Java Agent的两种使用方式:
- 在JVM启动时通过命令行参数加载Agent
- MethodAgentMain.java 实现了premain方法
- 可以在类加载时对字节码进行修改
- 在JVM运行时动态加载Agent
- MethodAgentMain.java 实现了agentmain方法
- 使用Javassist库对目标类的方法进行增强
包含了多个关于Java并发编程的示例:
- ConditionTest.java - Condition条件变量使用示例
- RenentrantLockTest.java - 可重入锁使用示例
- ThreadsInterrupt.java - 线程中断处理示例
- forkJoin.java - Fork/Join框架使用示例
提供了各种IO操作的示例代码:
- CharByte.java - 字符与字节流操作示例
- FileUtils.java - 文件工具类示例
- RandAccessFileTests.java - 随机访问文件示例
- IOTests.java - 基础IO操作示例
项目使用Maven进行构建管理,需要Java 17环境。
mvn clean package该命令会生成两个jar包:
advancedJava-1.0-SNAPSHOT.jar- 普通jar包advancedJava-1.0-SNAPSHOT-jar-with-dependencies.jar- 包含所有依赖的uber-jar
首先运行目标应用程序:
java -cp target/advancedJava-1.0-SNAPSHOT.jar com.zhouwy.advancedjava.demo.AgentTest然后在另一个终端中运行Attach程序来动态加载Agent:
java -cp target/advancedJava-1.0-SNAPSHOT-jar-with-dependencies.jar com.zhouwy.advancedjava.demo.AttachMainjava -javaagent:target/advancedJava-1.0-SNAPSHOT-jar-with-dependencies.jar -cp target/advancedJava-1.0-SNAPSHOT.jar com.zhouwy.advancedjava.demo.AgentTest- Javassist 3.25.0-GA - 字节码操作库
- JUnit 4.13.1 - 单元测试框架
- JDK Tools - JVM工具类(用于动态attach到JVM进程)
- 项目使用Java 17编译,需要相应版本的JDK才能正常运行
- 动态Attach功能需要相应的权限设置
- 在不同操作系统上运行时可能需要调整部分系统相关的代码