ソース情報
- リポジトリ
- hellyguo/self-ai-spec
- ソースの最終更新活動
- 2026年3月31日 06:53
- 検出された SKILL.md の言語
- 中国語
- スター
- 8
- フォーク
- 0
インストール方法
デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。
ソースファイルを確認
インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。
SKILL.md を表示中
SKILL.md
ソースの指示 · 読み取り専用プレビュー- name
- jmh-bench
- description
- 该skill没有执行文件,为操作指引:运行JMH基准测试的标准流程
# JMH 基准测试执行指南
## 核心要求
1. 测试默认参数:
- 预热10次
- 测试5次
- 每次预热执行100ms
- 每次测试执行20ms
- 4线程执行
- fork 3次
2. 测试首推用mvnd
## 前置准备
### 1. 获取环境信息
执行 skill `/java-env` 获取 Java 开发环境信息:
```
skill java-env
```
确认:
- mvnd/maven 目录位置
- JDK 版本匹配项目需求
### 2. 配置 pom.xml
在项目中添加 JMH 依赖:
```xml
<dependencies>
<!-- JMH Core -->
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-core</artifactId>
<version>1.37</version>
</dependency>
<!-- JMH Annotations -->
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-generator-annprocess</artifactId>
<version>1.37</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 编译插件,确保 annotation processor 生效 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-generator-annprocess</artifactId>
<version>1.37</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
```
## 执行方式
### 方式一:Maven Exec 插件(推荐)
```bash
# 编译项目
mvn clean compile -q
# 运行全部基准测试
mvn exec:exec -Dexec.executable="java" \
-Dexec.args="-cp %classpath org.openjdk.jmh.Main" -q
# 运行指定基准测试类
mvn exec:exec -Dexec.executable="java" \
-Dexec.args="-cp %classpath org.openjdk.jmh.Main BenchmarkClassName" -q
# 运行指定基准测试(带参数)
mvn exec:exec -Dexec.executable="java" \
-Dexec.args="-cp %classpath org.openjdk.jmh.Main BenchmarkClassName -wi 3 -i 3 -t 1 -f 1" -q
```
**参数说明:**
- `-wi N`: Warmup 迭代次数
- `-i N`: Measurement 迭代次数
- `-t N`: 线程数
- `-f N`: Fork 次数
### 方式二:run_bench.sh 脚本
创建脚本 `run_bench.sh`:
```bash
#!/bin/bash
# Run JMH benchmark
# Usage: ./run_bench.sh [BenchmarkClass] [jmh_args...]
PROJECT_DIR=$(dirname "$0")
cd "$PROJECT_DIR"
BENCHMARK_CLASS="${1:-}"
JMH_ARGS="${2:-}"
# Build classpath
CLASSPATH="target/classes:target/test-classes:$(mvn dependency:build-classpath -Dmdep.outputFile=/dev/stdout -q)"
# Run JMH
if [ -n "$BENCHMARK_CLASS" ]; then
java -cp "$CLASSPATH" org.openjdk.jmh.Main "$BENCHMARK_CLASS" $JMH_ARGS
else
java -cp "$CLASSPATH" org.openjdk.jmh.Main
fi
```
使用方式:
```bash
chmod +x run_bench.sh
# 运行全部
./run_bench.sh
# 运行指定类
./run_bench.sh MyBenchmark
# 运行指定类带参数
./run_bench.sh MyBenchmark "-wi 5 -i 5"
```
## 常用命令模板
| 场景 | 命令 |
|------|------|
| 快速验证 | `-wi 3 -i 3 -t 1 -f 1` |
| 标准测试 | `-wi 5 -i 5 -t 4 -f 2` |
| 精确测试 | `-wi 10 -i 10 -t 1 -f 3` |
| 列出所有Benchmark | `-l` |
## 输出解读
典型输出示例:
```
Benchmark Mode Cnt Score Error Units
MyBenchmark.testMethod thrpt 5 123456.789 ± 5000 ops/s
```
**指标说明:**
- `thrpt`: Throughput 吞吐量(ops/s)
- `avgt`: Average Time 平均耗时(us/op)
- `sample`: Sampling 时间采样
- `Score`: 平均值
- `Error`: 置信区间误差(99.9%)
## 最佳实践
1. **Warmup 充足** - 至少 5 次预热,让 JIT 编译稳定
2. **避免 GC 影响** - 测试前可手动触发 GC:`System.gc()`
3. **Blackhole 消费** - 防止死代码消除:`bh.consume(result)`
4. **State 隔离** - 使用 `@State(Scope.Thread)` 避免线程竞争
5. **单线程对比** - 多框架对比时先用 `-t 1` 消除并发因素
GitHubで見る