RFR: 8358535: Changes in ClassValue (JDK-8351996) caused a 1-9% regression in Renaissance-PageRank [v2]

Chen Liang liach at openjdk.org
Fri Aug 8 17:31:52 UTC 2025


> JDK-8351996, PR #24043, updated java.lang.ClassValue, but accidentally missed a piece of cache refresh code that is meaningful when the cache is speculatively invalidated by `remove` calls.
> 
> This caused a significant regression in the [PageRank](https://github.com/renaissance-benchmarks/renaissance/blob/master/benchmarks/apache-spark/src/main/scala/org/renaissance/apache/spark/PageRank.scala) benchmark, primarily because Scala array creation like `Array.fill` uses `scala.reflect.ClassTag` which uses `ClassValue`, making `ClassValue.get` a hot code path for every array creation.

Chen Liang has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains five additional commits since the last revision:

 - Rename test
 - Merge branch 'master' of https://github.com/openjdk/jdk into fix/classvalue-cache-miss
 - Merge branch 'master' of https://github.com/openjdk/jdk into fix/classvalue-cache-miss
 - Test
 - Cache miss when remove is called on another class

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/26679/files
  - new: https://git.openjdk.org/jdk/pull/26679/files/2556e54e..01110262

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=26679&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=26679&range=00-01

  Stats: 1195 lines in 101 files changed: 591 ins; 322 del; 282 mod
  Patch: https://git.openjdk.org/jdk/pull/26679.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/26679/head:pull/26679

PR: https://git.openjdk.org/jdk/pull/26679


More information about the core-libs-dev mailing list