本文讨论的是使用的最受欢迎的框架之一带来的开销–我敢打赌,几乎没有应用程序不使用java.util.Collections。

本文基于以下事实:框架为例如集合的初始大小提供了默认值。 因此,我们有一个假设,即大多数人不会费心地自行管理其收藏的大小,因此最终会导致未充分利用的收藏浪费了内存。 如果是这样,我们可以实施一个解决方案,告诉人们创建半空集合的位置以及如何避免浪费内存。

测量

为了检验我们的假设,我们决定测量十三种最常见的java.util.Collection成员的用法:

  • java.util.HashMap
  • java.util.WeakHashMap
  • java.util.IdentityHashMap
  • java.util.Hashtable
  • java.util.LinkedHashMap
  • java.util.HashSet
  • java.util.LinkedHashSet
  • java.util.ArrayList
  • java.util.concurrent.ArrayBlockingQueue
  • java.util.Vector
  • java.util.ArrayDeque
  • java.util.PriorityQueue
  • java.util.concurrent.ConcurrentHashMap

对于从这些类派生的所有对象,我们每30秒测量一次集合中包含的对象的数量以及集合底层数组中的空白空间的数量。 这种空空间消耗的内存量浪费了集合。 使用特殊版本的Plumbr从556个不同的实际应用程序中收集了这些数据。

结果

为了估计问题的严重程度,我们在每30秒后计算了所有收集的总浪费,并针对每个会话取了这些总计的最大值和平均值。 从下图还可以看到,大多数会话(556个中的397个)的最大摘要浪费小于1 MB,只有32个会话的最大摘要浪费超过10 MB,最大约为60 MB 。

该图的读取应类似于以下示例:共有291个应用程序浪费了大于0.1MB但小于1MB的内存。

结论

将结果与分配的堆大小进行比较,我们得出的结论是,至少在将浪费定义为未使用的堆的情况下,问题还不够大。 也使我们放弃这一方向的研究是碎片化–这种浪费通常散布在100多个不同的馆藏中,从而使优化工作更加困难且更容易出错。

这项特殊的研究没有详细说明动态增加底层阵列上的CPU开销是否足够大,这将是另一个故事。

参考: 在我们的JCG合作伙伴 Kairi Kangro的Java Collection Waste上,来自Plumbr Blog博客。

翻译自: https://www.javacodegeeks.com/2014/01/on-java-collection-waste.html

关于Java垃圾收集相关推荐

  1. 67.Java垃圾收集机制\对象引用\垃圾对象的判定\垃圾收集算法\标记—清除算法\标记—整理算法\分代收集\垃圾收集器\性能调优

    67.Java垃圾收集机制 67.1.对象引用 67.2.垃圾对象的判定 67.3.垃圾收集算法 67.3.1.标记-清除算法 67.3.2.标记-整理算法 67.3.3.分代收集 67.4.垃圾收集 ...

  2. Java垃圾收集蒸馏

    串行,并行,并发,CMS,G1,Young Gen,New Gen,Old Gen,Perm Gen,Eden,Tenured,Survivor Spaces,Safepoints和数百个JVM启动标 ...

  3. java清理垃圾_垃圾清理势在必行——Java垃圾收集算法

    一起学习 1.垃圾收集算法的核心思想 Java语言建立了垃圾收集机制,用以跟踪正在使用的对象和发现并回收不再使用(引用)的对象.该机制可以有效防范动态内存分配中可能发生的两个危险:因内存垃圾过多而引发 ...

  4. 【转】Java垃圾收集器

    原文链接 http://www.cnblogs.com/gw811/archive/2012/10/19/2730258.html#top Java垃圾收集器 概述 说起垃圾收集(Garbage Co ...

  5. (七)Java垃圾收集器详解

    面试官问:Java垃圾收集器了解过多少,说一下 JVM 有哪些垃圾回收器?这些问题在你面试高级Java的时候经常会问到.本篇文章结合着[深入理解Java虚拟机]一书当中整理了本篇博客. 如果想要对收集 ...

  6. java 垃圾收集时间改进_java – 偶尔遇到长时间的垃圾收集延迟,为什么?

    我很难处理Java垃圾收集问题,并解释日志. 我的应用程序要求GC不需要2秒钟以上,理想情况下不到100ms. 根据以前的一些建议,我正在尝试以下命令行选项: java -XX:MaxGCPauseM ...

  7. Java 垃圾收集(Garbage Collection)

    原文:http://www.artima.com/insidejvm/ed2/gcP.html 垃圾收集 ----Bill Venners Java虚拟机堆栈中存储运行中的java应用程序创建的所有对 ...

  8. 调整Apache Spark应用程序的Java垃圾收集

    调整Apache Spark应用程序的Java垃圾收集 王道远黄洁 由王道远和黄杰 发表于公司博客 2015年5月28日 这是来自英特尔SSG STO大数据技术小组的朋友的客座文章. 来源地址: ht ...

  9. 关于Java 垃圾收集器你应该知道这些

    如果Java虚拟机中标记清除算法.标记整理算法.复制算法.分代算法这些属于GC收集算法中的方法论,那么"GC收集器"则是这些方法论的具体实现. 概念准备 下面了解几个概念以帮助后面 ...

  10. 深入理解JVM(5) : Java垃圾收集器

    如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现. Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商.不同版本的虚拟机所提供的垃圾收集器都可能会有很大差 ...

最新文章

  1. 你必须非常努力,才能看起来毫不费力
  2. attr,abbr,addr三个常见的单词意思
  3. 【数据展示】matplotlib子图设置子标题(subtitle for subplot)
  4. 【转】 (C#)利用Aspose.Cells组件导入导出excel文件
  5. Java官方相关资源文件的获取教程
  6. 微信跳一跳高分系列二:adb shell 中的常用命令
  7. poj 3258 River Hopscotch 【二分】
  8. java 批量执行 sql_执行批量操作 - SQL Server | Microsoft Docs
  9. 会买单吗?李楠创办的怒喵科技发布新品牌了,推出潮流无线桌面产品
  10. pyspark读取csv_手把手教你实现PySpark机器学习项目——回归算法
  11. C# 程序异常关闭时的捕获
  12. PyQt5系列(一)第一个helloworld
  13. python怎么学比较有技巧_Python爬虫应该怎么学?程序猿花了一周整理的学习技巧,请收下...
  14. 大学学计算机考试大一,大学计算机基础大一考试必备题库[1].pdf
  15. 分布式光纤管道泄漏监测系统管道泄漏检测技术分析
  16. SAP 如何保证同一销售业务产生的收入和成本计入相同的会计期间?
  17. java 逃逸_Java 逃逸分析
  18. c语言中sign的用法,sign函数用法和实例详解
  19. YTU 问题 : 排序
  20. 【MCU】单片机看门狗工作原理

热门文章

  1. android之微信分享文本
  2. 用户模块开发 分类模块 商品模块 购物车模块
  3. spring(2)装配Bean
  4. 如何添加数据到session中
  5. 防止用户重复提交表单数据,session方式,js方式
  6. java 和javafx_Java,JavaFX的流利设计风格文本字段和密码字段
  7. 营销自动化权威指南_免费电子书:自动化根本原因分析的完整指南
  8. activemq消息持久化_ActiveMQ 5.x中的消息持久性
  9. selenium架构_Selenium测试的干净架构
  10. Sigma IDE现在支持Python无服务器Lambda函数!