垃圾收集 java

本文讨论的是使用的最流行的框架之一带来的开销–我敢打赌,几乎没有应用程序不使用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

垃圾收集 java_关于Java垃圾收集相关推荐

  1. 垃圾收集趣史-Java垃圾收集算法

    一篇非常不错的文章,介绍垃圾收集的发展史,形象地解释了垃圾收集的算法. 本文发表于2004年2月<CSDN开发高手>   写作本文的初衷是想和大家分享垃圾收集( Garbage Colle ...

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

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

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

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

  4. 搞定常见垃圾收集器【Java】

    (1)JVM的运行模式 Server Client Client的启动比Server模式快,但是长期运行进入稳定期后Server模式的程序运行速度会比Client快,这是因为Server模式启动的是重 ...

  5. java8默认内存收集器_使用正确的垃圾收集器将Java内存使用量降至最低

    java8默认内存收集器 大小对于软件至关重要. 很明显,与大的整体方法相比,在微服务体系结构中使用小片段具有更多优势. 最新的Java版本的Jigsaw有助于分解旧应用程序或从头开始构建新的云原生应 ...

  6. hotspot 垃圾收集器_HotSpot增量Java垃圾收集器

    hotspot 垃圾收集器 在我最近的博客文章" 确定活动的HotSpot垃圾收集器"中 ,我描述了可用于确定HotSpot JVM (Java进程)正在使用的垃圾收集器(当从命令 ...

  7. 使用正确的垃圾收集器将Java内存使用量降至最低

    大小对于软件至关重要. 很明显,与大型整体方法相比,在微服务体系结构中使用小型组件具有更多优势. 最新的Java版本的Jigsaw可帮助分解旧应用程序或从头开始构建新的云原生应用程序. 这种方法减少了 ...

  8. Java垃圾收集器:G1GC何时将CMS强制退出?

    在针对JDK 9(2017/4/4)提出的JEP中 , Mark Reinhold写道JEP 291 ("弃用并发标记扫描(CMS)垃圾收集器")是"已被放入" ...

  9. HotSpot增量Java垃圾收集器

    在我最近的博客文章" 确定活动的HotSpot垃圾收集器"中 ,我描述了可用于确定HotSpot JVM (Java进程)正在使用的垃圾收集器(当从命令行参数(标志) 中看不出来) ...

最新文章

  1. Commvault公司营收增长 但本季度仍身陷亏损
  2. Spring - Java/J2EE Application Framework 应用框架 第 6 章 集成AspectJ
  3. 【数据挖掘实例】构建Xgboost模型,在电力用户的95598工单数据中的电费敏感用户预测(高敏用户模型)
  4. java二叉树算法_JAVA 二叉树算法 (遍历、深度、汇总求和)
  5. VS2017设置背景主题
  6. 如何做一名出色的屌丝码农?
  7. 解决 Python2 和 Python3 的共存问题
  8. Static 静态内部类
  9. python删除链表重复节点_LeetCode-python 82.删除排序链表中的重复元素 II
  10. Unity 常用API以及C# 工具类的使用
  11. java getselecteditem_java – 为什么JComboBox上的getSelectedItem()不是通用的?
  12. 2018考研数学经验详谈
  13. 按键精灵定义全局变量_按键精灵全局环境变量
  14. 酸了,深圳一普通中学老师工资单曝光,秒杀程序员!
  15. excel文字显示图标集_创建自己的Excel图标集
  16. css布局之版权信息
  17. Linux C报错: /usr/bin/ld: cannot find -ldb
  18. R语言按照城市取样(一个城市有多行观测,想筛选一些城市)
  19. #ifdef _cplusplus是什么意思
  20. 我爱你宠物网——创业笔记(三)

热门文章

  1. HDU5875 - Function
  2. SpringCloud Greenwich(七)集成dubbo先启动消费者(check=false),然后启动提供者无法自动发现注册
  3. Redis 5.0 正式版发布了,19 个新特性
  4. 推荐一个实用的 .gitignore 文件
  5. JavaFX之TableView
  6. 斐波那契查找+思路分析
  7. 蓝桥杯JAVA省赛2013-----B------3(振兴中华)
  8. java转换文本文件到xlsx(自制缓冲区,无需先验文件行数)
  9. jdk8 cms g1gc_JDK 14:CMS GC是OBE
  10. jdk8 npe_JDK 14中更好的NPE消息