XPerf
语言Java证据

jp-值类-装箱

主张

@JvmInline 值类在作为泛型/Array/nullable 元素使用时会进行装箱。在 JDK 27 / Kotlin 2.4.21 上,List 路径的时间大约是 IntArray 路径的 4.0 倍,分配大约是 5.0 倍。JDK 25 的时间对大约是 1.05 倍。

如何测量

  • 来源:K15_ValueClassBoxing.jsonl
  • JDK 27 (27+35),Kotlin 2.4.21,JVM 参数 -XX:+UseCompactObjectHeaders。Linux x64,负载 0.78。
  • 之前: sumBoxedList_UserId_n1e4
  • 之后: sumPrimitive_intArray_n1e4

运行时(本证据文件)

FieldValue
When2026-10-23
before65983.793 ns_per_op, 200056.0 B/op
after16566.447 ns_per_op, 40032.453 B/op
前后比率约 3.98× 时间,约 5.0× 每操作字节

Lint 映射 / 策略

默认严重性 提示。List 与 IntArray 相比,大约慢 4.0 倍,分配内存约 5.0 倍。Array<UserId> 路径为 33385 ns/op 和 200032 B/op,大约是 IntArray 时间的 2.0 倍。

限制

在这台机器上进行微基准测试;请参见 scripts/run-static-vs-hotspot.sh。不要随意编造比率。语料残差 ≠ 加速比。