RFR: 8242451: ensure semantics of non-capturing lambdas are preserved independent of execution mode

Gilles Duboscq gdub at openjdk.java.net
Wed Sep 9 08:25:10 UTC 2020


[JDK-8232806](https://bugs.openjdk.java.net/browse/JDK-8232806) introduced the
jdk.internal.lambda.disableEagerInitialization system property to be able to disable eager initialization of lambda
classes. This was necessary to prevent side effects of class initializers triggered by such initialization in the
context of the GraalVM native image tool.

However, the change as it is implemented means that the behaviour of non-capturing lambdas depends on the value of
`disableEagerInitialization`: when it is false (the default) such lambdas are actually a singleton while when it is
true, a fresh instance is returned every time.

Programs should definitely _not_ rely on reference equality since the Java spec does not guarantee it. However, in
order to separate concern and ease debugging such bad programs, `disableEagerInitialization` shouldn't influence the
singleton vs. fresh instance behaviour of lambdas in either direction.

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

Commit messages:
 - 8242451: ensure semantics of non-capturing lambdas are preserved independent of execution mode

Changes: https://git.openjdk.java.net/jdk/pull/93/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=93&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8242451
  Stats: 97 lines in 2 files changed: 73 ins; 5 del; 19 mod
  Patch: https://git.openjdk.java.net/jdk/pull/93.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/93/head:pull/93

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


More information about the core-libs-dev mailing list