在内存方面使用枚举对许多常量有效吗?

时间:2016-09-12 19:16:21

标签: java enums java-8 constants

我有一个看起来像这样的课程:

public class MessageBuilder{

  private enum MsgCodes{

    CODE_1("some string"),
    CODE_2("another string"),
    CODE_3("you get the idea");

    private String msg;

    MsgCodes(String msg){
      this.msg = msg;
    }

    private String text(){
      return msg;
    }
  }

  private MessageBuilder(){
    //prevents initialization outside the class
  }

  //Gives synchronized behaviour to initialization without enforcing it into getInstance()
  private static class Loader{
    static MessageBuilder INSTANCE = new MessageBuilder();
  }

  public static MessageBuilder getInstance(){
    return Loader.INSTANCE;
  }

  public String buildMessage(String[] codes){
    String res = "";
    for(String code : codes){
      res += QAmsg.valueOf(code).text();
    }
    return res;
  }

}

我担心的是加班(意思是应用程序开发)我会在这个类上有越来越多的enum(我理解这不仅是一个好的,甚至是保持常量只用于一个的首选方法我对enum很新,所以我真的不知道如果这个列表变得“太大”会发生什么,这仍然是保持它们的有效方法吗?

我可以使用不同的方法,所以不是整个列表,而只是我当时正在使用的一个代码被实例化? enum实例只会使用一次,还是每次使用它时都会实现所有内容?

我让这个类成为单身人士,认为这会阻止我多次实例化enum列表,但这可能是不必要的,因为我不完全理解enum行为。

1 个答案:

答案 0 :(得分:7)

枚举成员只是public static final常数,因此是单身人士。假设您的列表增长到10,000个枚举成员,每个成本为1 KB。即使在这些奢侈的假设下,它也将达到10 MB的Java堆。

很明显,你不应该担心枚举成员的内存消耗。