枚举存储(内存等)

4

我刚刚想了一个小问题,不确定是否能找到正确答案:

如果我在Java中使用一个带有自己构造函数(以及许多、许多、非常多的参数)的ENUM - 这些参数会在每次程序执行时存储在内存中吗?还是只有在使用它们时才会“加载”到内存中?

我的意思是,如果我有一个包含400个条目的ENUM,并且只使用其中一个条目 - 所有其他条目仍然存在于内存中吗?

一些伪代码:

public enum Type {
    ENTRY_A(val1, val2, val3, val4, new Object(val5, val6, val7, ...)),
    ENTRY_B(val1, val2, val3, val4, new Object(val5, val6, val7, ...)),
    ENTRY_C(val1, val2, val3, val4, new Object(val5, val6, val7, ...)),
    ...
}

如果我只使用ENTRY_A,不去碰ENTRY_B、ENTRY_C等等 - Java会如何处理呢?
谢谢回答 - 是的,这主要是出于好奇。

3
问题应该改为:"你为什么要创造这样一个怪物?"。 - Jagger
2
@Jagger 那绝对是一个更好、更有趣的问题。我同意 :-) - Edwin Dalorzo
这就是我的问题所在,如果不必要的话,要避免创建这样一个庞然大物,并为其使用配置或数据源。但由于数据不会经常更改,它也可以只是一个枚举(但由于显然它是在内存中加载的,那么这不是正确的方法)-因此,这个问题背后的想法是找到一个答案:“我应该将其作为枚举还是数据文件来处理?”;) - Katai
3个回答

4

即使您只使用一个ENUM常量,所有内容都将加载到内存中。

枚举是一种特殊类型的类,所有字段都是常量,因此当您加载ENUM时,它会将所有内容加载到内存中。


4

当您第一次使用枚举时,这将触发类初始化,所有值都将被创建并存储在内存中,就像其他任何类一样。


能否让javac进行一些优化? - fwonce
@fwonce 你所说的优化是什么意思?你有什么想法吗? - Edwin Dalorzo

1

你可以自己尝试一下。只需在你的enum的构造函数中放置例如System.println("test"),并根据实际结果进行调整。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接