java - 在多个常量中将一个常量加载到jvm中

标签 java memory constants static-members

在我的代码中我必须使用一些常量值,所以我创建了一个实用类

public class ConstantUtility {
    public final static String category1_name1="category1/name1";
    public final static String category1_name2="category1/name2";
    public final static String category1_name3="category1/name3";
    .
    .
    .
    public final static String category2_name100="category2/name100";
    public final static String category2_name101="category2/name101";
    .
    .
    .
}

但我有大约 2000 个常量值,我没有在我的应用程序中使用所有这些值,但它们应该作为一个选择存在。问题是当我使用实用程序类时,所有变量都是静态变量,并且所有字符串值都加载到 jvm 中。

2000个常量分为6类。我尝试使用 6 个静态类,但仍然是一样的。当 jvm 找到静态类时,它会将每个静态变量加载到内存中。

与我真正使用的字符串常量内存相比,所有那些我不使用的常量内存被加载到 jvm 中要大得多。

问题:如何在所有这些常量中只加载一个常量到内存。

最佳答案

而且可以肯定的是:你问这个是因为你正在做一些“嵌入式”项目;你遇到了内存问题;并且您进行了概要分析/分析,发现拥有这 2000 个字符串确实在您的应用程序中存在问题?因为:如果您什么都不做 - 是什么让您认为您确实遇到了需要花时间解决的问题?

还有一个旁注:仅你有 2000 个常量这一事实;他们中的许多人“未使用”......非常表明你应该少担心这种设计对内存消耗的影响;但在设计本身。

老实说,从一开始就“可能不是一个很好的设计”来说,这闻起来很糟糕。

关于java - 在多个常量中将一个常量加载到jvm中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38068205/

相关文章:

c++ - 为什么动态内存分配(堆)出现运行时错误?

c - 如何在Linux中读取和更改内存中的值?

java - 声明/初始化和内存分配

java - 定义像 #define 这样的常量,可以在 java 中的 switch 语句中使用

STL 容器中的 C++11 shared_pointer constness

java - 如何在 JAXB 中使用 hashmap 属性?

java - 如何防止Spring Security在每个页面都要求输入密码

c++ - 具有 const 和 nonconst 成员的 union ?

java - 范围为 int 的 switch 语句

java - 如何从 gradle 正确执行 ant.java?