根据 jls§8.9.2枚举主体声明
枚举声明声明终结器是编译时错误。枚举类型的实例可能永远不会完成。
由于finalizer在Garbage Collector运行之前执行,如果不存在finalizer,这是否意味着enum类型始终保持加载在内存中,而Garbage Collector不适用于该enum类型?
enum
如果编译像这样的枚举
enum Suit {SPADES, HEARTS, CLUBS, DIAMONDS}
您将看到生成的字节码(即javap -p Suit)对应于合成类:
javap -p Suit
final class Suit extends java.lang.Enum<Suit> { public static final Suit SPADES; public static final Suit HEARTS; public static final Suit CLUBS; public static final Suit DIAMONDS; private static final Suit[] $VALUES; public static Suit[] values(); public static Suit valueOf(java.lang.String); private Suit(); }
因此,枚举的实例是类本身的静态成员。然后,我认为可以进行垃圾回收的唯一方法是,如果类本身是垃圾回收,那么如果它是由系统类加载器加载的,则不太可能发生。