关于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 。

ArrayList-HashMap-overhead3

该图的读取应类似于以下示例:共有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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365869.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ansys命令流_ANSYS命令流建模3之划分单元+施加弹簧

以马蹄形隧道为例,本文介绍如何添加荷载等隧道如上图所示!设置线单元材料属性,划分单元(二衬单元)lsel,s,,,1,6 !LSEL,Type,Item,Comp,VMIN, VMAX,VINClATT,1,1,3 !给线单元付材料号、实常数、单元类型号 LATT, MAT, REAL, TYPE, ESYSMSHKEY,1 …

计算机专业多元协同,项目主导多元协同资源开放—软件技术专业人才培养体系的创新实践.pdf...

第九届全国职业院校计算机系主任年会塑 造 I T 职 业 教 育 竞 争 力中国长沙 2018.10.12项目主导、多元协同、资源开放—软件技术专业人才培养体系的创新实践教授,常州信息职业技术学院副校长;眭碧霞 全国工业和信息化职业教育教学指导委员会委员&#…

Linux 系统中用户切换(su user与 su - user 的区别)

1,su命令 (su为switch user,即切换用户的简写) 格式:su -l USERNAME(-l为login,即登陆的简写,其中l可以省略) 如果不指定USERNAME(用户名),默认即…

正则表达式常用方法

RegExp对象中的方法 1,test()方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。 reg规定匹配以a开头的字符串,利用test进行测试,字符串str满足reg匹配规则…

检查您的REST参数!

我正在进行与正在进行的“项目学生”系列相关的研究,并意识到我犯了最常见的错误,也最容易纠正的错误之一。 我并没有利用我对Web应用程序了解的所有知识来向外扩展我的安全范围。 我正在专门考虑UUID参数。 我知道每个有效的外部可见ID都是UUID。 我知…

python安装哪个版本好啊_windows10安装哪个版本的Python?

python2除了一些大公司历史遗留问题还在使用,目前中小创公司使用最多的是python3 大公司的一些新项目也开始用python3了 目前来说,python3.5以上的版本都可以 目前使用最多的是python3.7(建议你安装这个) 最新的是python3.8&#…

mongose + express 写REST API

一、准备工具 先确保电脑已经安装好nodejs 1.mongoose;安装非常简单: npm install mongoose --save 【mongoose封装了mongodb的方法,调用mongoose的api可以很轻松的对mongodb进行操作】 2.express;npm install express --save …

js实现html模板继承,理解JavaScript中的原型和继承

本文主要讲了原型如何在JavaScript中工作,以及如何通过[Prototype]所有对象共享的隐藏属性链接对象属性和方法;以及如何创建自定义构造函数以及原型继承如何工作以传递属性和方法值。介绍JavaScript是一种基于原型的语言,这意味着对象属性和方…

将.py文件装成这执行文件.exe

目前已知 cx_freeze支持python3生成可执行文件 cx_freeze的操作 参考http://keliang.blog.51cto.com/3359430/661884 转载于:https://www.cnblogs.com/qingsheng/p/9599885.html

python测试脚本截图_selenium + python实现截图并且保存图片

webdriver的截图功能十分强悍,无论页面多长,webdriver都能比较完美的截到完整的页面。 python代码: # -*- coding: utf-8 -*- from selenium import webdriver import unittest import os, sys, time from pathlib import Path # 初始化实例 …

骁龙660是32位还是64位_高通发布骁龙 7c/8c 芯片,以后你可能会在电脑上看到它...

高通的芯片生意早已不局限于移动设备领域,而是进一步深入至 PC 市场。相比强调性能的 X86 芯片,以高通骁龙为代表的 ARM 系芯片则希望突出自己的优势,即更长的电池续航、无风扇设计和全天候的蜂窝网络连接。在骁龙技术峰会的第三天&#xff0…

Java泛型中的子类型化

泛型类型为Java程序引入了新的类型安全范围。 在同一类型上,泛型类型可以表现得很好,尤其是在使用通配符时 。 在本文中,我想解释子类型如何与Java泛型一起工作。 关于泛型类型子类型化的一般思考 不同泛型类型相同的类或接口的不定义亚型层…

css3之盒模型

什么是盒模型? css中的每个元素都是一个盒模型, 包括html body元素, 浏览器解析css的时候也会把每个元素看成一个盒子来解析。 盒模型具备的属性有: content 、padding 、margin、border 、background等 盒模型的分类&#xff1…

小朋友排队|2014年蓝桥杯B组题解析第十题-fishers

小朋友排队 n 个小朋友站成一排。现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。 每个小朋友都有一个不高兴的程度。开始的时候,所有小朋友的不高兴程度都是0。 如果某个小朋友第一次被要求交换,则他的不高兴…

学计算机的误解,让人误解的六大专业

原标题:让人误解的六大专业隔行如隔山,很多人喜欢看名字猜专业,所以导致很多大学专业被人误解。其实了解一个专业不能仅仅凭借它的名字,也不能断章取义,只取片面意思。接下来就让我们来了解一下有哪些被人误解的专业吧…

杂项:轮询

ylbtech-杂项:轮询1.返回顶部 1、轮询(Polling)是一种CPU决策如何提供周边设备服务的方式,又称“程控输出入”(Programmed I/O)。轮询法的概念是,由CPU定时发出询问,依序询问每一个周…

python类属性的调用方法_问一个关于PYTHON类属性调用方法的问题

def baidu(self): self.APP_ID2180368 self.API_KEYEYAvb2oTaGa9oSNs5S2yx6v self.SECRET_KEYdmgvBELGq9cMvk2uSPqLUaLUpEng02D self.aipAipOcr(self.APP_ID,self.API_KEY,self.SECRET_KEY) #1.这里定义的self.aip 3. 如果 我把这个self.aip定义在__init__(self)里面就不会报错…

js和css实现手机横竖屏预览思路整理

实现效果,如上图。 首先,实现手机页面在PC端预览, 则先在网上找到一个手机的背景图片,算好大概内间距,用来放预览的页面,我这里是给手机预览页面的尺寸按iphone5的尺寸来的; 一个手机页面在这里…

Lambda,会序列化吗?

因此,我一直在思考Tyrus项目所需的增强功能,该功能允许用户广播到跨机器集群连接到URL的客户端子集。 有多种方法可以做到这一点; 但是自从我使用JDK 8以来,这个问题肯定看起来像钉子。 为此,我创建了一个简单的单元测…

thinkphp日志泄漏漏洞_【Windows高危漏洞预警】CVE20200601,影响关键加密功能

一、事件报告2020年伊始,NSA发现了一个影响Microsoft Windows加密功能的严重漏洞(CVE-2020-0601)。证书验证漏洞允许攻击者破坏Windows验证加密信任的方式,并且可以启用远程代码执行。该漏洞会影响Windows 10和Windows Server 2016/2019以及依赖Windows的…