2

为了尝试提高性能,我打算使用包含大量字符的字符串。我想知道是否有任何尺寸可以被认为是最佳的。例如,如果我声明一个可以容纳 5000 个字符串的字符串数组,并且每个单元格中的字符串可以容纳 5000-7000 个字符,我正在考虑是否存在任何性能下降。

请指教。

4

2 回答 2

3

由于存储在常量池中,字符串文字被限制为 65535 个字节。我不确定运行时字符串是否存在限制,除了由于数组寻址而导致的明显限制 2^31-1 之外。

编辑以清除问题:这是修改后的 Utf8 编码中的 65535 字节。它与普通 Utf8 相同,只是空字符是两个字节,BMP 之外的字符使用代理对(6 个字节而不是 4 个)。如果你只是在做 ascii,那么这只是每个字符一个字节。

于 2012-08-09T21:59:58.990 回答
3

原则上,正如 Antimony 所提到的,字符串的限制是您可以放入数组中的字符数,即 2^31-1。

您提到的数据量大约为 100MB:即如果您真的坚持该数据顺序,这不是一个大问题。如果您想使用 10 倍以上的量,您可能需要开始重新考虑。

您可以考虑做的一件事是尝试声明您的代码以传递 CharSequences 而不是 Strings。您不能覆盖 String,但是如果您稍后意识到这样做可以为您带来一些优化(例如以某种方式压缩内部表示),您可以创建自己的实现 CharSequence 的类。

除此之外,我会按照您的意图编写代码,然后在您实际遇到性能问题时进行分析。

于 2012-08-09T22:14:56.123 回答