代码之家  ›  专栏  ›  技术社区  ›  Atul

提取大量字符串文字是个好主意吗?[已关闭]

  •  3
  • Atul  · 技术社区  · 9 年前

    在我正在处理的遗留代码库中,有大量的字符串文本。其中大量是重复的。例如,字符串“userID”用于500个位置。可能有一千种这样的文字被重复使用。IntelliJ Idea静态代码分析建议我将它们作为常量提取。如果IDE自动为我进行重构,而我不需要输入一行代码,我应该这样做吗?

    一般来说,提取许多这样的重复字符串文字作为常量是一个好主意吗?这将明显避免重复,提供单一的访问点、声明等。

    然而,这些文字中的一些在被访问时会出现。如果我将所有文本声明为常量(静态final),那么所有这些都将一起加载。在这种情况下,将所有这些文字声明为常量是一个好主意吗?在这种情况下,您能否提供一些垃圾收集、内存空间预防措施的指针?在这种情况下使用了哪些最佳实践?

    一些注意事项:我知道字符串文字是内部的。所以我不认为在最坏的情况下我会保存任何内存。而且,看起来jdk 7将把这些字符串放在堆中,而不是放在permgen中。我看到了 couple of questions 就像我的,但感觉不一样。所以把它贴在这里。

    谢谢

    1 回复  |  直到 7 年前
        1
  •  6
  •   TheLostMind    9 年前
    1. 所有字符串文字都是 被拘留的 自动地从JDK7+开始,当课程(实际上是 加载类的类加载器 定义字符串文本的)将得到GCed(前提是没有其他类引用它(尽管这种情况很少发生..) static final 从节省内存的角度来看,将它们放在一个公共类中确实是无用的,但从设计的角度来看是有用的,因为它将提供单一的访问点。

    2. 这个 相同的 字符串文本在JVM中的所有类之间共享。所以,不会有新的字符串。实际上,将它们放在一个类中并从该类访问它们,可以使代码更结构化/更可读。

    我的建议是,不要修改遗留代码,除非它会产生很大的影响。权衡由您自己选择:P