繁体   English   中英

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

[英]Java Char Buffer that automatically grows and can be re-used

您好Java开发人员:

我正在寻找一个内置的类来存储字符序列。 它需要满足以下条件:

  1. 它可以存储char值(不仅仅是字节值)
  2. 它具有一个append方法,如果基础数据结构超过预分配的大小,该方法将使基础数据结构的大小自动增长。
  3. 有清除内容的方法(即重新使用内存)。
  4. 可以读取给定索引的条目。

我找到了一些满足其中一些要求的选项,但并非全部。 例如:

  1. CharBuffer不满足2。
  2. StringBuffer不满足3。
  3. ByteArrayOutputStream不满足1。
  4. CharArrayWriter不满足4。

我是否误解了其中一个类的文档,还是那里的某个人知道满足所有这四个条件的数据结构?

编辑:按条件3,我并不是说要释放GC的内存。

我处于需要重复分配和取消分配其中一些缓冲区的情况。 在我的用例中,这些缓冲区最终会变得很大(〜100 KB),我将有多个线程使用此类缓冲区。

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

StringBuilder / StringBuffer应该满足3的要求,因为delete(...)应该可以满足您的要求。 还是为什么不简单地创建一个新实例并让旧实例成为GC?

StringBuffer可以删除其内容

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

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

(专用的.reset()方法会很好。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM