RFR: JDK-8219412: Eager enum class initialization with enum switch

Brian Goetz brian.goetz at oracle.com
Thu Apr 4 18:50:38 UTC 2019


Note that when we switch to translating with indy, this can be cached at 
the indy call site.  (And, in the case where the compile-time and 
run-time numberings are the same, we can even, if we like, eliminate the 
indirection through the array.)

On 4/4/2019 1:59 PM, Jan Lahoda wrote:
> 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