Java Char Buffer自动增长并可以重复使用

时间:2013-08-20 22:29:55

标签: java char buffer

Hello Java Developers:

我正在寻找一个内置类来存储一系列字符。它需要符合以下标准:

  1. 它可以存储char值(不仅仅是字节值)
  2. 它有一个append方法,如果它超过预先分配的大小,会导致底层数据结构自动增大。
  3. 有清除内容的方法(即重新使用内存)。
  4. 可以读取给定索引处的条目。
  5. 我找到了几个满足其中一些要求的选项,但不是全部。例如:

    1. CharBuffer不满足2。
    2. StringBuffer不满足3.
    3. ByteArrayOutputStream不满足1.
    4. CharArrayWriter不满足4。
    5. 我是否误解了其中一个类的文档,或者是否有人知道满足所有4个标准的数据结构?

      编辑: 根据标准3,我不是指GC的空闲内存。

      我正处于需要重复分配和取消分配其中几个缓冲区的情况。在我的用例中,这些缓冲区最终会相当大(~100 KB),并且我会使用这样的缓冲区。

      我知道我可以创建一个缓冲区,使用它然后在我完成时将其GC-ed。但是,我发现当您不断分配和取消分配大部分JVM(和物理机器)内存时,JVM垃圾收集器运行速度非常慢。当我开始对内存进行微管理(就像在C ++中可以做到的那样)时,通过分配缓冲区一次然后重新使用它(因此不那么频繁地触发垃圾收集),我发现了速度提升。

3 个答案:

答案 0 :(得分:2)

StringBuilder / StringBuffer应该满足3,因为delete(...)应该做你需要的。或者为什么不简单地创建一个新实例并让旧实例进行GC?

答案 1 :(得分:2)

StringBuffer能够删除它的内容

buffer.delete(0, buffer.length());

答案 2 :(得分:0)

我发现的解决方案: StringBuilder有.setLength(0),我可以用来让缓冲区开始重写内容。

(专用的.reset()方法本来不错。)