RFR: JDK-8219412: Eager enum class initialization with enum switch
Jan Lahoda
jan.lahoda at oracle.com
Thu Apr 4 17:59:54 UTC 2019
Hi,
When there is a switch over enum in the code, and is compiled into the
bytecode, the meaning of the switch should not change even if the enum's
constant are reordered. This is achieved by a map that maps the
(current) enum constants to the appropriate case in the switch. This map
is stored in a field in an auxiliary class, and filled when that
auxiliary class is loaded in.
But, if there are multiple switches over distinct enums under a single
top-level class, the mapping fields for all the enums are stored in a
single class. So, when any of these is needed, the mapping is
constructed for all the enums, which may cause enum class initialization
even in cases where it shouldn't happen.
The proposed fix is to create a separate auxiliary classes for each
enum/mapping.
Proposed patch: http://cr.openjdk.java.net/~jlahoda/8219412/webrev.00/
JBS: https://bugs.openjdk.java.net/browse/JDK-8219412
How does this look?
Thanks,
Jan
More information about the compiler-dev
mailing list