加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 将属性值名称存储为String常量 – 性能和内存使用情况?

发布时间:2020-12-15 04:52:50 所属栏目:Java 来源:网络整理
导读:我使用了大约1000个与特定 java.util.Properties相关联的属性,这些属性由文件支持.该文件的主要原因是更改它们而不重新编译程序,并允许用户根据自己的喜好调整它们. 某些属性仅在代码中的一个位置使用,但有些属性在不同的代码段甚至不同的类中多次使用. 我最
我使用了大约1000个与特定 java.util.Properties相关联的属性,这些属性由文件支持.该文件的主要原因是更改它们而不重新编译程序,并允许用户根据自己的喜好调整它们.
某些属性仅在代码中的一个位置使用,但有些属性在不同的代码段甚至不同的类中多次使用.

我最近习惯于声明所有那些用作String常量的属性,通常是在一个单独的界面中,如下所示:

public interface AnimalConstants {
  public static final String WEIGHT_PROPERTY = "weight";
  public static final String RUNNING_SPEED_PROPERTY = "speedInKph";
  public static final String HOURS_OF_SLEEP_A_DAY_PROPERTY = "sleepHrs";
  ...
}

当一个类需要访问一些动物属性时,我只是实现了这个接口,我可以访问所有声明的属性常量.当我需要一个特定的属性时,我只使用相应的常量,而不考虑它的确切名称(因为经常使用缩写),更重要的是,这种方式消除了错误输入属性名称的风险.另一个优点是,如果我稍后选择重命名属性以使配置这些属性的高级用户更清楚),我只需要在声明该属性常量的接口中更改该名称(当然还有属性文件) ),所以不需要“搜索和替换”整个项目.最后,我可以轻松检查财产是否被使用;我只是评论它,编译代码,看看是否有错误.

然而,尽管有这些优点,我很好奇这种方法的缺点是什么.我最感兴趣的是以下内容:

>这种方法(1000字符串常量)对字符串池有什么影响?或者,当我访问这些常量时,它们是按需创建的?这是否会阻止其他字符串在字符串池中缓存?
>与使用硬编码字符串常量的方法相比,此方法的性能成本是多少,是否相同(忽略访问字段的成本)?字符串池的行为是相似还是有很大不同?
>这种方法的平均内存增加是多少,所有那些字符串常量一直保存在内存中?

任何好的评论/观察都是受欢迎的.

解决方法

1)这种方法(1000字符串常量)对字符串池有什么影响?

将属性名称声明为String常量是正确的决定.但是“字符串文字池”中没有任何变化.当存在相同文字的多个实例时,它们都只是链接到文字池中的相同项目(不提供String构造函数).

2)当我访问这些常量时,它们是按需创建的吗?

在类加载期间,字符串文字被添加到“字符串文字池”中.

3)这是否会阻止其他字符串在字符串池中缓存?

没有.

4)与使用硬编码字符串常量的方法相比,这种方法的性能成本是多少,是否相同(忽略访问字段的成本)?字符串池的行为是相似还是有很大不同?

这是相同的.

5)这种方法的平均内存增加是多少,所有那些字符串常量一直保存在内存中?

我已经回答了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读