3

在阅读了这个老问题的答案后,我有点想知道现在是否有任何框架可以比java.lang.String.

如果可能的话,我想使用 byte[] 而不是 char[] 来存储表示字符串。

我的String(s)将是常量,并且我并不真正需要java.lang.String类提供的大量实用程序方法。

4

2 回答 2

3

Java 6 执行此-XX:+UseCompressedStrings操作,在某些更新中默认启用。

它不在 Java 5.0 或 7 中。默认情况下它仍列为启用,但在 Java 7 中实际上并不支持。:P

根据您想要做什么,您可以编写自己的类,但如果您只有几个 100 MB 的字符串,我怀疑它不值得。

于 2012-08-08T12:13:22.857 回答
0

这种优化很可能不值得它带来的努力和复杂性。要么接受 VM 为您提供的东西(正如 Peter Lawrey 建议的那样),要么竭尽全力开发自己的解决方案(不使用 java.lang.String)。

您自己的 String 类可以实现一个接口 CharSequence。不幸的是,很少有 JRE 方法接受 CharSequence,因此如果您需要将任何“字符串”传递给任何其他 API,请准备好在您的类中经常使用 toString()。

您还可以破解String 以更高效的内存(和更少的 GC 友好方式)创建您的字符串。String 有一个(包访问级别)构造函数 String(offset, count, char[]),它不复制字符,而只是将 char[] 作为直接引用。您可以将所有字符串放入一个大的 char[] 数组并使用反射构造字符串,这将避免通常由字符串中的 char[] 数组引入的大部分开销。我不能真正推荐这种方法,因为它依赖于 JRE 私有功能。

于 2012-08-08T12:39:31.387 回答