java – 将属性值名称存储为String常量 – 性能和内存使用情况?
我使用了大约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)这种方法的平均内存增加是多少,所有那些字符串常量一直保存在内存中? 我已经回答了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |