- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
不久前,我问过this question关于 ChronicleMap 被用作 Map<String,Set<Integer>>
。基本上,我们有一个集合,其中平均值 Set<Integer>
可能是 400,但最大长度是 20,000。对于 ChronicleMap 2,这导致了相当严重的 JVM 崩溃。我转移到 ChronicleMap 3.9.1 并且现在开始出现异常(至少不是 JVM 崩溃):
java.lang.IllegalArgumentException: Entry is too large: requires 23045 chucks, 6328 is maximum.
at net.openhft.chronicle.map.impl.CompiledMapQueryContext.allocReturnCode(CompiledMapQueryContext.java:1760)
at net.openhft.chronicle.map.impl.CompiledMapQueryContext.allocReturnCodeGuarded(CompiledMapQueryContext.java:120)
at net.openhft.chronicle.map.impl.CompiledMapQueryContext.alloc(CompiledMapQueryContext.java:3006)
at net.openhft.chronicle.map.impl.CompiledMapQueryContext.initEntryAndKey(CompiledMapQueryContext.java:3436)
at net.openhft.chronicle.map.impl.CompiledMapQueryContext.putEntry(CompiledMapQueryContext.java:3891)
at net.openhft.chronicle.map.impl.CompiledMapQueryContext.doInsert(CompiledMapQueryContext.java:4080)
at net.openhft.chronicle.map.MapEntryOperations.insert(MapEntryOperations.java:156)
at net.openhft.chronicle.map.impl.CompiledMapQueryContext.insert(CompiledMapQueryContext.java:4051)
at net.openhft.chronicle.map.MapMethods.put(MapMethods.java:88)
at net.openhft.chronicle.map.VanillaChronicleMap.put(VanillaChronicleMap.java:552)
我怀疑这仍然是因为我的值与平均值相差甚远。我假设 ChronicleMap 根据我给构建器的平均值确定最大块数为 6328,但没想到会有一个巨大的值,需要 23045 个 block 。
所以我的问题是:解决这个问题的最佳方法是什么?我正在考虑但仍不确定的一些方法:
ChronicleMapBuilder.maxChunksPerEntry
或ChronicleMapBuilder.actualChunkSize
。也就是说,我如何确定性地弄清楚这些应该设置成什么?另外,如果设置得太高,可能会导致大量碎片和性能下降,对吗?XYZ
产生 Set<Integer>
大小为 10000,也许我可以将其分成 5 个键 XYZ:1
, XYZ:2
等等,每个都有一组大小为 2000 的集合。这感觉就像是对我可以在 ChronicleMap 中配置的东西进行了黑客攻击,并导致大量代码感觉好像没有必要。我在其他问题中也提到了同样的计划。其他想法/想法表示赞赏!
最佳答案
如果您不指定maxChunksPerEntry()
手动时,条目的最大大小受到段层大小的限制(以 block 为单位)。因此,您需要的是增大段层的大小。您可以尝试做的第一件事是配置 actualSegments(1)
,如果您不打算同时从 JVM 中的多个线程访问映射。您可以通过 ChronicleMapBuilder.actualChunkSize()
对这些配置进行额外控制, actualChunksPerSegmentTier()
和 entriesPerSegment()
.
默认情况下 ChronicleMapBuilder 选择配置平均值大小的 1/8 到 1/4 之间的 block 大小。因此,如果您的段层大小为 6328 个 block ,则您的段配置为包含大约 1000 个条目。如果您的平均值集大小有 400 个元素,最大值为 20,000,则平均值和最大值之间的差异应约为 50 倍,但从堆栈跟踪来看,您的其中一个条目比平均值大 2000 倍以上。可能你还没有考虑到一些事情。
对于这么大的值,我建议开发和使用内存效率更高的值序列化器,因为默认的序列化器会生成大量垃圾。例如它可以使用原语 IntSet
它实现了 Set<Integer>
来自 fastutil 或 Koloboke 或 Koloboke 编译库。
另外我建议使用现在可用的最新版本,Chronicle Map 3.9.1 已经过时了。
关于java - 填充值大小变化较大的 ChronicleMap 时出现 IllegalArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41129923/
我正在通过 PHP 将 .csv 中的两行插入到表中。 我还会跟踪任何错误,如果发生错误,我不会提交事务。插入表后,我检索结果行的 ID(全部在一个事务中提交),并且 csv 的第一行对应于第二个 I
一个应用程序托管一个具有三个接口(interface)的 Web 服务,用于三个单独且独立的操作,所有这些操作都在应用程序的不同组件中实现,彼此独立,例如在不同的包等中,所以他们对彼此了解不多,只共享
我希望在单击特定表格数据单元格时同时选中单选按钮和单选按钮单击事件。我已经使用以下方法实现了这一点: $(document).ready(function() { $("td").click(
JSFiddle:https://jsfiddle.net/oyp1zxaq/ 本质上,我只是想在较大的 div 中放置四个具有定义宽度的较小 div,但我希望它们在其中间隔开。 我想知道是否有一种方
我在一个布局中有两个 View 。我将分别称它们为 View A 和 View B。 ┌──────┐ │┌─┐┌─┐│ ││A││B││ │└─┘└─┘│ └──────┘ 父布局(包括View A
我是一名优秀的程序员,十分优秀!