-
Enhancement
-
Resolution: Fixed
-
P4
-
11, 17, 18
-
b25
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8279389 | 17.0.3-oracle | Harold Seigel | P4 | Resolved | Fixed | b01 |
JDK-8279371 | 17.0.3 | Aleksey Shipilev | P4 | Resolved | Fixed | b01 |
Symbol table lookup had an optimization added when the symbol table was split into a shared table (for CDS?) and a dynamic table. The optimization tries to track which table successfully found a symbol, so it can try that table first the next time.
At startup time, most symbols will be from the shared table, but over time lookup can will be from a mix of dynamic and shared symbols (eg user classes still have java.lang.String fields or subclass from java.lang.Object), resulting in multiple threads fighting over the value of this global variable.
With enough threads and cores, this can result in "true sharing" cache line contention.
Symbol table lookup is used in many JVM operations, including classloading, serialization, and reflection.
In some cases the regression can be seen in the SPECjvm serial benchmark
At startup time, most symbols will be from the shared table, but over time lookup can will be from a mix of dynamic and shared symbols (eg user classes still have java.lang.String fields or subclass from java.lang.Object), resulting in multiple threads fighting over the value of this global variable.
With enough threads and cores, this can result in "true sharing" cache line contention.
Symbol table lookup is used in many JVM operations, including classloading, serialization, and reflection.
In some cases the regression can be seen in the SPECjvm serial benchmark
- backported by
-
JDK-8279371 Scalability bottleneck in SymbolTable::lookup_common()
- Resolved
-
JDK-8279389 Scalability bottleneck in SymbolTable::lookup_common()
- Resolved
- relates to
-
JDK-8059510 Compact symbol table layout inside shared archive
- Resolved
-
JDK-8260718 Reconsider SymbolTable shared/dynamic switch optimization
- Closed
- links to
-
Commit openjdk/jdk17u-dev/0a538a08
-
Commit openjdk/jdk/1d7cef33
-
Review openjdk/jdk17u-dev/27
-
Review openjdk/jdk/6400
(3 links to)