Concurrent updates may lead to redundant LambdaForms created and unnecessary 
class loading when those are compiled. 

Most notably, it severely affects MethodHandle customization: when a 
MethodHandle is called from multiple threads, every thread starts customization 
which takes enough time for other threads to join, but only one of those 
customizations will be picked.

Coordination between threads requesting the updates and letting a single thread 
proceed avoids the aforementioned problem. Moreover, there's no need to wait 
until the update in-flight is over: all other threads (except the one 
performing the update) can just proceed with the invocation using the existing 
MH.form. 

Testing:
- manually monitored the behavior on a stress test from 
[JDK-8252049](https://bugs.openjdk.java.net/browse/JDK-8252049)
- tier1-4

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

Commit messages:
 - Improve concurrent LF customization

Changes: https://git.openjdk.java.net/jdk/pull/1472/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=1472&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8257189
  Stats: 90 lines in 5 files changed: 38 ins; 20 del; 32 mod
  Patch: https://git.openjdk.java.net/jdk/pull/1472.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/1472/head:pull/1472

PR: https://git.openjdk.java.net/jdk/pull/1472

Reply via email to