scala集合转java

关于我们的数据结构的一个有趣的事情是,即使我们非常熟悉它们,但对于我们来说,仍然很难说出像HashMap这样基本的东西在1GB的内存中可以容纳多少个项目。 我们可能会在学校,高级开发人员那里学到这一点,或者由于数据结构选择不当而导致服务器崩溃时,我们可能会以艰难的方式来学习。 所以我决定这样做。 我从大约20个最流行的Java,Scala,Guava和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。

那里有很多其他的收集类型(队列,堆栈等),但是我想从基础开始,并根据受欢迎的需求添加更多的收集类型。 因此,如果您想在列表中看到另一个收藏夹,或者想进一步了解某些功能上的差异,请在下面的评论部分中知道该怎么做。

  • 该代码可在此处获得 。
参考: Java,Scala,Guava和Trove集合-它们可以容纳多少数据? 来自我们的JCG合作伙伴 Tal Weiss的Takipi博客。

翻译自: https://www.javacodegeeks.com/2014/01/java-scala-guava-and-trove-collections-how-much-data-can-they-hold.html

scala集合转java

scala集合转java_Java,Scala,Guava和Trove集合-它们可以容纳多少数据?相关推荐

  1. Java,Scala,Guava和Trove集合-它们可以容纳多少数据?

    关于我们的数据结构,令人着迷的事情之一是,即使我们对它们非常熟悉,我们仍然很难说出像HashMap这样基本的东西在1GB的内存中可以容纳多少个项目. 我们可能会在学校,高级开发人员那里学到这一点,或者 ...

  2. scala详细笔记(七)scala集合练习题 [函数练习题][scala案例][scala练习]

    0 经典WorkCount案例 统计文本文件中单词出现的次数 import scala.io.Source import scala.reflect.io.File /*** @Author 多易教育 ...

  3. 在Scala中列出| 关于Scala列表的完整教程

    Scala | 清单 (Scala | List) List in Scala is a collection that stores data in the form of a liked-list ...

  4. 【Scala笔记——道】Scala 循环遍历 for详解

    Scala for循环 基本使用 增强型for循环 scala基本for循环如下,代码将names遍历并打印包含的名字. val names = Seq("Kitty", &quo ...

  5. Scala系列-4、scala中特质、柯里化、闭包等

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 传送门:大数据系列文章目录 目录 scala中特质 特质作为接口使用 特质中放置非抽象的成员 ...

  6. Guava中针对集合的 filter和过滤功能

    Guava中针对集合的 filter和过滤功能 博客分类:  JAVA相关 在guava库中,自带了过滤器(filter)的功能,可以用来对collection 进行过滤,先看例子: Java代码   ...

  7. 面向 Java 开发人员的 Scala 指南: 深入了解 Scala 并发性

    http://www.ibm.com/developerworks/cn/java/j-scala04109.html http://www.ibm.com/developerworks/cn/jav ...

  8. guava集合操作类的使用_使用Guava进行测试集合的实现

    guava集合操作类的使用 我目前正在为LibFX添加一项新功能,为此我创建了一些类似于Java Collections Framework的自定义集合. 我一直在寻找可以与之对抗的测试,并很高兴发现 ...

  9. Guava的测试集合实现

    我目前正在为LibFX添加一个新功能,为此我创建了一些类似于Java Collections Framework的自定义集合. 我一直在寻找可以针对它们进行测试的测试,并很高兴发现Google的Gua ...

最新文章

  1. 序列每天从1开始_时间序列预测一
  2. 马尔科夫、最大熵、条件随机场
  3. React实践debug:JSX输出的限制(存疑)
  4. 黑科技教你一招如何解除 生活中烦人的验证码问题
  5. maven+jetty项目在tomcat部署
  6. javapanel根据内部组件_[译]避免在unmounted组件上调用setState
  7. css3动画过渡按钮
  8. 【转】【Linux】sed命令详解
  9. 李洪强-C语言5-函数
  10. android p wifi一直在扫描_Android Wifi 扫描及自动连接
  11. HDU 1754 I Hate It(线段树版)
  12. python提取身份证信息_Python3 简单抓取身份证地址信息
  13. html中panel居中显示图片,editorgridpanel
  14. spring-boot集成kafka(包含zookeeper和kafka的下载介绍)
  15. 『 文件操作 』HTML文件转MD文件
  16. Java 语言被很多人抱怨语法繁琐、开发效率低、体系繁杂而笨重,为什么还有这么强的生命力,尤其是在企_-Chaz-_新浪博客
  17. c 语言 todo 用法,Tip:iOS开发中关于TODO的用法
  18. 基于Heka+Flume+Kafka+ELK的日志系统
  19. 自然之美--记冬夏黄山
  20. 2022华中杯数学建模思路

热门文章

  1. 初一模拟赛(4.20)
  2. 【结论】立体井字棋(jzoj 2124)
  3. 汇编语言(二十三)之求一个数的补数
  4. Spring MVC工作原理
  5. ​通俗理解神经网络BP反向传播算法
  6. 线上防雪崩利器——熔断器设计原理与实现
  7. 企业级负载均衡如何实现
  8. Java:对double值进行四舍五入,保留两位小数的几种方法
  9. dom4j读取XML文件内容
  10. 零云九歌小组KTV点歌系统简介