plugins/languages/java/skills/performance/SKILL.md
Java 性能优化规范 — JFR 生产 profiling、JMH 基准测试、Generational ZGC / G1GC 调优、GraalVM Native Image、CDS、async-profiler 火焰图、Micrometer 指标。当用户排查性能瓶颈、内存泄漏、GC 停顿、优化吞吐/延迟,或讨论 "性能优化"、"JFR"、"JMH"、"GC 调优"、"ZGC"、"Native Image"、"火焰图"、"profiling"、"benchmark" 时加载。
npx skillsauth add lazygophers/ccplugin java-performanceInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
数据驱动,禁猜测:profile → 找热点 → 改 → JMH 验证 → 回归测试。
disk=true,maxsize=500m,maxage=1d)IntStream / LongStream 处理原始类型# 启动时持续记录 (生产推荐)
java -XX:StartFlightRecording=disk=true,maxsize=500m,maxage=1d \
-XX:FlightRecorderOptions=stackdepth=256 \
-jar app.jar
# 运行时按需
jcmd <pid> JFR.start duration=60s filename=run.jfr settings=profile
jcmd <pid> JFR.dump filename=now.jfr
# 离线分析
jfr summary run.jfr
jfr print --events jdk.CPULoad,jdk.GarbageCollection run.jfr
# 或 JMC GUI (https://www.oracle.com/java/technologies/jdk-mission-control.html)
关注事件:
jdk.ExecutionSample、jdk.CPULoadjdk.ObjectAllocationInNewTLAB、jdk.OldObjectSamplejdk.GarbageCollection、jdk.GCPhasePausejdk.JavaMonitorEnter、jdk.ThreadParkjdk.VirtualThreadPinned@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MICROSECONDS)
@State(Scope.Benchmark)
@Warmup(iterations = 3, time = 1)
@Measurement(iterations = 5, time = 1)
@Fork(2)
public class CollectionBenchmark {
private List<String> data;
@Setup public void setup() {
data = IntStream.range(0, 10_000).mapToObj(i -> "item-" + i).toList();
}
@Benchmark public long streamCount() {
return data.stream().filter(s -> s.contains("5")).count();
}
@Benchmark public long parallelStream() {
return data.parallelStream().filter(s -> s.contains("5")).count();
}
}
// build.gradle
plugins { id 'me.champeau.jmh' version '0.7.2' }
jmh { warmupIterations = 3; iterations = 5; fork = 2; resultFormat = 'JSON' }
./gradlew jmh
java -XX:+UseZGC -XX:+ZGenerational \
-Xms4g -Xmx4g \
-jar app.jar
java -XX:+UseG1GC -XX:MaxGCPauseMillis=200 \
-XX:G1HeapRegionSize=16m -XX:+G1UseAdaptiveIHOP \
-Xms4g -Xmx4g -jar app.jar
java -Xlog:gc*:file=gc.log:time,uptime,level,tags:filecount=5,filesize=100m -jar app.jar
# 分析:GCEasy.io、GCViewer
# CDS (Class Data Sharing) — 轻量,启动提速 20-40%
java -XX:ArchiveClassesAtExit=app.jsa -jar app.jar # 1) 创建归档
java -XX:SharedArchiveFile=app.jsa -jar app.jar # 2) 复用
# GraalVM Native Image — 启动 <100ms,内存 -50~80%
./gradlew nativeCompile
./build/native/nativeCompile/my-app
# 适用:Serverless、CLI、低内存容器;不适:反射重度依赖
// 集合预容量
List<User> users = new ArrayList<>(expectedSize);
Map<String, User> map = HashMap.newHashMap(expectedSize); // Java 19+
// 字符串
String result = String.join(",", list); // 替代手动循环
String s = "name=%s, age=%d".formatted(n, a); // 替代 String.format
// 原始 Stream,避免装箱
IntStream.range(0, 100).sum();
OptionalInt max = IntStream.of(1, 2, 3).max();
// 不可变 List
List<T> result = stream.toList(); // Java 16+
// JPA fetch 防 N+1
@Query("SELECT u FROM User u JOIN FETCH u.orders WHERE u.id IN :ids")
List<User> findAllWithOrders(@Param("ids") List<Long> ids);
// HikariCP
// spring.datasource.hikari.maximum-pool-size=10
// spring.datasource.hikari.minimum-idle=5
// spring.datasource.hikari.connection-timeout=2000
@Timed(value = "user.query", percentiles = {0.5, 0.95, 0.99})
public Optional<User> findById(Long id) { ... }
@Bean
public TimedAspect timedAspect(MeterRegistry r) { return new TimedAspect(r); }
四大黄金指标:延迟 (P50/P95/P99/P999)、吞吐 (QPS/TPS)、错误率、饱和度。
./asprof -d 30 -f cpu.html <pid> # CPU
./asprof -d 30 -e alloc -f alloc.html <pid> # 分配
./asprof -d 30 -e lock -f lock.html <pid> # 锁竞争
./asprof -d 30 -e wall -f wall.html <pid> # 含等待时间
| AI 易犯解释 | 实际应核验 | |---------|---------| | "凭经验改" | 是否有 JFR/JMH 数据? | | "看起来慢" | 是否是 profiling 热点? | | "快了 10%" | 是否 JMH 置信区间验证? | | "G1 够用" | 是否评估 Generational ZGC? | | "JVM 默认参数" | 是否按负载调优? | | "parallelStream 更快" | 数据是否 >10K + CPU 密集? | | "Native Image 太麻烦" | Serverless/CLI 是否评估? |
JOIN FETCH 防 N+1tools
UI/UX 与布局设计——做界面布局/结构/导航/组件/交互的设计决策。触发:做UI/UX/布局/排版/导航/组件/交互/栅格/响应式/图表选型/字体配对。按媒介路由 HTML/Web、原生 App(iOS/Android/桌面)、CLI、TUI。需后端动态系统不适用;配色/主题/色板走姊妹 skill design-color。
tools
主题与配色设计——做颜色搭配/调色板/主题/品牌色阶/暗模式的设计决策。触发:选配色/调色/主题/色板/品牌色/暗模式/对比度/色盲/UI风格。按媒介路由 HTML/Web(CSS变量)、原生App(平台token)、CLI(ANSI)、TUI(真彩/256/16降级)。保证可访问性(对比度/色盲安全)。需后端动态系统不适用;UI/UX 布局/组件/交互走姊妹 skill design-uiux。
tools
跨任意组件(plugin/skill/agent/command)的验证驱动优化循环纪律 skill。当用户要优化某个已有组件却无明确方向、或要防止改了反而更差(自评乐观偏差 / 多维同改归因失效 / 为凑分加废话膨胀)、或要把一套通用「评分→单变量改→改后验证严格更好才留否则回滚→触顶停」的纪律套到任意组件上时使用。管优化过程本身的纪律(validation gate / ratchet / 独立验证 / 触顶停),不评单组件深度(交 skill-dev),不查插件接线(交 plugin-dev)。仅手动 /optimize-any 触发。
data-ai
两层规则记忆 (基于 .skein/spec)。planning 时 recall 召回相关规则、task finish 后 sediment 沉淀学习 + prune 自动精简过期/重复/断链规则。core 常驻硬规 + recall 按需召回, 经判定门自动写盘 (不逐次问用户)。产出 .skein/spec 下 core/recall 规则文件 + index。另支持空仓 bootstrap 播种规则基线、记忆大面积失效 (大重构/换栈) 时 reconstruct 可逆归档后按项目类型分型重建、maintain 手动体检 (超预算/stale/断链/重复/废弃, --apply 自动修复)、auto-fix (Stop hook 写 .pending-fix 标记 → main 派 skein-specer bg 跑 maintain --apply 全自动修, 断链只报告)。