可以做软件的网站有哪些功能吗,网站备案网站类型,设计师必看的10个网站,管理咨询公司税收优惠scala集合转java关于我们的数据结构的一个有趣的事情是#xff0c;即使我们非常熟悉它们#xff0c;但对于我们来说#xff0c;仍然很难说出像HashMap这样基本的东西在1GB的内存中可以容纳多少个项目。 我们可能会在学校#xff0c;高级开发人员那里学到这一点#xff0c;… scala集合转java 关于我们的数据结构的一个有趣的事情是即使我们非常熟悉它们但对于我们来说仍然很难说出像HashMap这样基本的东西在1GB的内存中可以容纳多少个项目。 我们可能会在学校高级开发人员那里学到这一点或者由于数据结构选择不当而导致服务器崩溃时我们可能会以艰难的方式来学习。 所以我决定这样做。 我从大约20个最流行的JavaScalaGuava和Trove集合中进行了测试并测试了它们每个在1GB内存的JVM通过-Xmx中可以容纳多少个随机整数。 对于每个数据结构我们都附加int直到收到OutOfMemoryError为止该错误结束了测试。 为了确保一致性我们在JDK 7上运行了每个测试5次。 对于这种基本测试我发现其中一些结果令人惊讶。 *我想我们不在同一页上因为这不是竞争。 不同的集合具有不同的语义。 我也没有包括时间因为重点不是微基准测试性能而是让我们了解我们日常使用的收藏实际上可以容纳多少。 结果 Scala的集合比Java具有更大的容量。 Scala集合似乎比Java集合更有效。 虽然某些集合例如TreeSets的表现大致相同但其他集合例如Scala的HashMaps却能够容纳近15的物品。 HashSet可以容纳的项目比Java同类项目多8。 我很想听听社区人士为什么这么认为。 Scala的ArrayBuffer相对于ArrayList具有一点优势。 唯一的例外是Scala的链表它比Java的LinkedList所保存的数据少18。 这里的一个约束是为了追加到列表它需要接收另一个链接列表而不是直接值。 即使这样假设临时列表是GC的它本身也不会影响列表在1GB JVM中的容纳容量。 *我们正在计算持有的int数这意味着每张地图插入2 int。 如果您不使用Trove那么您会错过。 从第一天开始我们就一直在Takipi的后端使用Trove的收藏。 好吧可惜不是从第一天开始因为这可以节省我们很多时间来优化服务器代码。 TIntArrayList能够容纳250的Scala和Java盒装同类产品这些数字足以说明一切。 对于地图观察到相似的比率。 令人惊讶的是Trove的映射性能超过Java和Scala列表超过50。 请记住您还具有从int到Object的Trove集合映射反之亦然因此您不需要完全原始的映射即可享受容量的好处。 即使这样我们仍然看到Trove的TIntLinkedList可以容纳比装箱它们的原语的Java ArrayList或Scala ArrayBuffer更少的数据。 这确实使您可以查看在您的代码中大量使用的链表并重新考虑-我绝对需要它吗 由于使用Trove集合与标准库的集合实际上没有开销因此我不会将使用它们归类为“按需优化”方案。 这是因为内存消耗错误通常会在规模上显现这是最难发现的错误因此您必须开始进行生产调试 当然Trove不会使您摆脱固有的效率低下的算法。 有时可能是分析核心转储和观看巨人比赛之间的区别。 番石榴–大地图小套。 番石榴的多套产品比Java和Scala的同类产品价格更高。 与Scala的设置相比它们能够保存的数据量减少了19。 不利的一面当然是他们可以执行使用标准集合语义不可能完成的事情。 只要多集将在您的内存结构中扮演重要角色请确保您需要这些。 对于多贴图我们看到的情况恰恰相反。 Guava的MultiHashMap比Java的hashmap拥有的值多20比Scala的多10。 看到虽然Guava的多集在容量方面不及Java和Scala等价物但MultiMap实际上却胜过Java和Scala。 那里有很多其他的收集类型队列堆栈等但是我想从基础开始并根据受欢迎的需求添加更多的收集类型。 因此如果您想在列表中看到另一个收藏夹或者想进一步了解某些功能上的差异请在下面的评论部分中知道该怎么做。 该代码可在此处获得 。 参考 JavaScalaGuava和Trove集合-它们可以容纳多少数据 来自我们的JCG合作伙伴 Tal Weiss的Takipi博客。 翻译自: https://www.javacodegeeks.com/2014/01/java-scala-guava-and-trove-collections-how-much-data-can-they-hold.htmlscala集合转java