语言Java
jvm性能
JVM(Java / Kotlin)性能笔记、可运行示例、JMH/JOL 基准,以及用 Java 编写的 jvmperf-lint。
属于 XPerf。共享文档:docs/README.md。语料库就绪。小型证据 JSONL 位于 evidence/ 下。
目录
- 英文指南 — 来自
docs/guide-src/en/ jvmperf-lint— Java 检查器(Gradle,tree-sitter)- 语料库固定
- 证据指针 · 证据政策
- HotSpot 关联:
scripts/run-static-vs-hotspot.sh
焦点
分配/装箱,布局(SoA,原始映射),热路径字符串和 I/O,JIT/伪共享/虚拟线程,Kotlin 序列和内联。没有本地基准或引用的说法保持暂定;语料库计数是 lint 内部使用。
要求
- JDK 21 用于构建和测试
jvmperf-lint(CI:Temurin 21)。将JAVA_HOME固定为 21 — 仅使用主机 JDK 25 可能会导致 Gradle 报错,出现不明确的25.0.x信息。该项目使用 Java 21 工具链 + Foojay 解析器。 - JDK 25 可选,用于 JMH/JOL 示例和基准测试(运行这些脚本时使用单独的
JAVA_HOME) - Kotlin 2.4.x 用于 Kotlin 示例(
scripts/check_kotlin.sh) lib/中的可选 jar 文件 — 不在 git 中;使用bash scripts/fetch-lib.sh拉取(参考lib/README.md)。默认JVMPERF_LIB_DIR=$ROOT/lib
运行 lint
cd packages/jvmperf/jvmperf-lint
export JAVA_HOME="${JAVA_HOME:-/usr/lib/jvm/java-21-openjdk-amd64}"
./gradlew test jar
bin/jvmperf-lint ../examples --no-fail
bin/jvmperf-lint --list-rules当存在发现时退出代码为 1(除非使用 --no-fail)。在使用/输入输出错误时退出代码为 2。
严重性说明: 除非使用 --no-fail,否则进程退出仍会将任何发现视为失败。每条规则的默认严重性(error、hint 或 off)遵循 docs/evidence-policy.md;标记为 off 的规则不会运行,除非使用 --enable 选择(此时只运行所列规则)。完整的 --preset 配置可能稍后推出。
自检:./gradlew test(夹具 + 单元)。使用 --no-fail 的内部示例作为审查提示。
长凳与支票
# From packages/jvmperf: rebuild guides from docs/guide-src (code samples are inlined in the chapter files)
bash ../../scripts/build-guides.sh jvmperf
scripts/check_java.sh
scripts/check_kotlin.sh
# JMH / JOL / Kotlin alloc (writes JSONL under research/bench-results):
# scripts/run_jmh.sh …
# scripts/run_jol_maps.sh
# scripts/run_kotlin_alloc.sh布局
docs/guide-src/ chapter sources (en/, zh-CN/)
docs/ assembled guides + corpus.md
examples/ java + kotlin (+ android fixtures)
jvmperf-lint/ Java checker (Gradle) + fixtures
jmh-benches/ JMH sources
lib/ optional jars (gitignored; fetch-lib.sh)
research/ small in-tree Jol/EA probe sources (no *.log dumps)
scripts/ run_*, check_*, env.sh (build_guide is superseded by the repo-level scripts/build-guides.sh)
evidence/ pointers to research JSONL (not full dumps)