簡體   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