在我的Java代码中,我通过以下方式使用Guava的Multimap(com.google.common.collect.Multimap):
Multimap<Integer, Integer> Index = HashMultimap.create()
此处,Multimap键是URL的一部分,而值是URL的另一部分(转换为整数)。现在,我分配了JVM 2560 Mb(2.5
GB)堆空间(通过使用Xmx和Xms)。但是,它只能存储900万个这样的(键,值)整数对(大约1000万个)。但是,理论上(根据所占用的内存int
),它应该存储更多。
有谁能够帮我,
Multimap
使用大量内存?我检查了我的代码,并且没有在中插入对Multimap
,它仅使用1/2 MB的内存。是否有其他方法或自制解决方案来解决此内存问题? 就是说,有什么方法可以减少那些对象的开销,因为我只想存储int-
int?还有其他语言吗?或任何其他解决方案(首选自制解决方案)来解决我面临的问题,意味着基于数据库的解决方案或类似的解决方案。
与关联的开销很大Multimap
。最低限度:
Integer
对象,它(至少)使每个int
值的存储需求增加了一倍。HashMultimap
都与a Collection
的值相关联(根据source,Collection
a为a Hashset
)。Hashset
都使用8个值的默认空间创建。因此,每个键/值对所需的空间(至少)可能比您对两个int
值的预期要大一个数量级。(将多个值存储在单个键下的情况要少得多。)我希望1000万个键/值对可能占用400MB。
尽管您有2.5GB的堆空间,但如果这还不够的话,我不会感到惊讶。我认为上述估算值偏低。另外,它仅说明构建地图后需要存储多少存储空间。随着地图的增长,需要重新分配和重新整理表,这至少会暂时使使用的空间量增加一倍。最后,所有这些都假定int
值和对象引用需要4个字节。如果JVM使用64位寻址,则字节数可能加倍。
我的 Spark 版本是 2.2.0,它在本地工作,但在具有相同版本的 EMR 上,它给出了以下异常。
问题内容: 刚刚发现了Guava库项目。 这些与GWT兼容吗? 问题答案: 从该页面的介绍性PDF中, 您可以在…上使用这些库。 在JDK 6上 在Android上, 我们认为。需要志愿者来帮助我们进行测试。 在Google App Engine上, 我们认为。需要志愿者来帮助我们进行测试。 在GWT上-参差不齐! 由于GWT的JDK库支持 可能参差不齐,也许是2/3,所以到目前为止,这些库中的东
问题内容: 我想知道哪个更有效,为什么? 1) 要么 2) 问题答案: 我看不出您为什么要在此处使用builder的任何原因: 比在这种情况下制作一个更具可读性, 不会推断通用类型,并且在用作单行代码时必须自己指定类型, (来自docs) 在与另一个不可变集合调用时 做得很好( 尝试避免在安全的情况下实际复制数据 ), (从源) 调用以前创建的,同时避免为零元素和一元素集合创建任何列表(分别返回空
我想为番石榴设个坑(http://pitest.org/)进行突变熟练度测试,但我在尝试运行时出现以下错误。这是我得到的错误: 基本上,要么PIT没有检测到测试,要么测试在PIT中运行不正常,所有测试都失败了。我读了这篇文章:JUnit测试通过,但PIT说套件不是绿色的,我认为“您的代码库是否包含可变静态状态?(例如在单例中)”是问题所在,但我不知道如何修复它。如果测试套件有一些隐藏的顺序依赖关系
问题内容: 编辑: 我已经重新组织了这个问题,以反映自从可用以来的新信息。 请先阅读此问题及其答案,但基本上得出的结论是,番石榴图不会异步计算和执行驱逐。给出以下地图: 进入条目后经过十分钟后,直到再次“触摸”地图后,该条目仍不会退出。执行此操作的已知方法包括常用的访问器- 和和 。 我的问题的第一部分[已解决]: 还有哪些其他调用导致地图被“触摸”?具体来说,有谁知道是否属于这一类? 对此感到疑
问题内容: 我必须在我的HashMultiMap中存储超过1亿个键值(键可以具有多个值)。任何人都可以帮助我在存储和搜索方面更快的一个: 1)伯克利DB 2)东京内阁 3)H2 4)缓存 5)或其他 还有一点,那些性能与内存中的哈希映射大致相同吗?一点指导会更有帮助。谢谢。 注意:关于任何一个的信息也是有帮助的。 问题答案: 我建议Redis。它比其他结构更像是一种数据结构存储(例如,它支持地图和