由于 Java 的默认字符串实习受到了很多负面报道,因此我正在寻找替代方案。
你能推荐一个 API 来替代 Java 字符串实习吗?我的应用程序使用 Java 6。我的要求主要是通过实习避免重复字符串。
关于坏消息:
- 字符串实习生是通过本机方法实现的。并且 C 实现使用一些 1k 条目的固定大小,并且对于大量字符串的扩展性非常差。
- Java 6 将实习字符串存储在 Perm gen 中。因此不是 GC'd 并可能导致 perm gen 错误。我知道这在 java 7 中已修复,但我无法升级到 java 7。
为什么我需要使用 intering?
- 我的应用程序是一个堆大小为 10-20G 的服务器应用程序,用于不同的部署。
- 在分析过程中,我们发现数十万个字符串是重复的,我们可以通过避免存储重复的字符串来显着提高内存使用率。
- 内存一直是我们的瓶颈,因此我们将其作为目标,而不是进行任何过早的优化。