在我处理的遗留代码库中,有大量的字符串文字。其中很多是重复的。例如,在500个地方使用字符串“ userID”。可能有一千个这样的文字被重复使用。IntelliJ Idea静态代码分析建议我将其提取为常量。如果IDE为我自动执行此重构,而无需我输入一行代码,我应该这样做吗?
通常,将许多重复的字符串文字提取为常量是个好主意吗?显然,这将避免重复,将提供单点访问,声明等。
但是,其中一些文字会在访问时出现。如果我将所有文字声明为常量(静态最终),则所有这些文字将一起加载。在这种情况下,将所有这些文字声明为常量是一个好主意吗?在这种情况下,您能否提供一些指向垃圾回收和内存空间预防措施的指针?在这种情况下使用的最佳做法是什么?
一些注意事项:我知道字符串文字是固定的。因此,我认为在最坏的情况下我不会节省任何内存。而且似乎jdk 7会将这些字符串放在堆中,而不是在permgen上。我看到了夫妻 的 问题,像我,但觉得这是不同的。所以在这里发布。
谢谢
所有字符串文字都将自动被嵌入。从JDK7 +,他们将GCed上课的时候(实际上是其加载的类加载器定义他们得到GCed定义字符串常量)(没有提供其他类是指它(虽然这种情况很少见。)。让它们static
和final
和从节省内存的角度来看,将它们放入一个普通的类确实是没有用的,但是从设计的角度来看却很有用,因为它将提供单点访问。
在相同的字符串字面量在JVM在所有课程中共享。因此,将没有新的字符串。实际上,将它们放在一个类中并从该位置访问它们可以使您的代码更结构化/更易读。
我的建议是,不要修改遗留代码,除非有很大的不同。权衡是您的选择。:P
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句