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