java - 在内存方面对许多常量使用枚举是否有效?

标签 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 行为。

最佳答案

枚举成员只是 public static final 常量,因此是单例。假设您的列表增长到 10,000 个枚举成员,每个成员花费 1 KB。即使在这些夸张的假设下,它也将达到 10 MB 的 Java 堆。

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

关于java - 在内存方面对许多常量使用枚举是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39457229/

相关文章:

java - 算法是指数的,有没有办法让它不是这样?

java - list 中的接收者 'class' 或 'interface' 预期错误

java - 安卓选项菜单

java8 - 从对象内部的属性分组

Java Stream 减少无法解释的行为

Java servlet 试图输出一个 xlsx 文件,但不断获取八位字节流

c# - MongoDb C# 驱动程序 - 将 List<enum> 序列化为字符串 []

将 argv[] 与允许元素列表进行比较

swift - 在快速枚举中,何时使用原始值以及何时使用关联值

java - 如何使用流将 String 数组转换为 int 数组