簡體   English   中英

java中具有良好(插入、迭代)性能特征的原始多圖

[英]primitive multimap in java with good (insert, iteration) performance characteristics

我正在使用 Java 中的 ints/longs 進行一些繁重的處理(構建逆索引)。

我已經確定標准 java.collections 地圖的(取消)裝箱占用了總處理時間的很大一部分。 (與使用數組的類似實現相比,由於內存限制我無法使用)。

我正在尋找可以支持以下結構的快速 3rd 方實現(或任何與此相關的實現):

具有特征的地圖:

- 映射中的鍵是稀疏的(范圍 [0,2^64] 中的 +/- 10.000.000 個鍵 - 值總是附加到列表的末尾 - 快速插入(如果可能的話,分攤 O(1)) - 快速迭代按鍵順序。

我看過 trove、fastutil 等,但找不到使用原語的多圖實現(僅法線貼圖)

任何幫助表示贊賞。

謝謝,吉爾特-簡

您是否考慮過使用原始 long -> Object-map 和原始 int-set 作為值自己實現多部分?

谷歌收藏庫怎么樣? http://code.google.com/p/google-collections/

根據基數可以使用特定類型的對象 Primitive Int/Long To where value:

  • if (size == 1) => Long(如果有大量重復,可以去重);

  • if (size <= 13) => LogSet(數組中有 16 個元素);

  • 如果(大小> 13)=> SparceLongBitSet。 使用例如 16 長作為每個塊的有效載荷(甚至可以重用數組)

對於 int 可以將 26 視為決定點。 如果性能非常重要,請僅使用特定的分片/塊大小進行基准測試,例如 SparseLongBitSet。 對於內存局部性,請考慮重用相同的內存塊(例如 2M 的數組)。

最后一滴:Insted of Object 考慮使用索引到有效載荷(例如堆外指針)並使用靜態方法(Flightweith 之類)對有效載荷進行操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM