2012-10-24 28 views
4

我只是问自己一个小问题,我不知道如果我能找到正确的答案是:ENUM存储器(内存等)

如果我使用Java中的ENUM,与自己的构造函数(以及很多很多的maaaaany参数) - 是每次程序执行时存储在内存中的,还是只在内存中“加载”,如果它们已被使用?

我的意思是,如果我有一个包含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这本来就是一个更好,更有趣的问题。我同意:-) –

+0

那么,这是我的问题,避免创建这样一个怪物,如果没有必要 - 并使用它的配置或数据源。但是由于数据不会经常变化,所以它可能只是一个枚举(但是因为显然它被加载到内存中,那不是那么顺利) - 所以这个问题背后的想法是找到一个答案问题:'我是以ENUM还是数据文件的形式来做这件事? ;) – Katai

回答

4

是一切都将被载入,即使您只使用一个ENUM常量内存。

枚举是类的特殊类型,所有字段都是常量,所以当你加载ENUM时,它自己将所有内容加载到内存中。

4

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

+0

是否有可能让javac做一些优化? – fwonce

+0

@fwonce你是什么意思的优化?你有什么考虑? –

1

你总是可以自己尝试。只需在enum的构造函数中输入System.println("test"),并凭经验获得结果。