您是否敢更改HashMap实现?

如今,有大胆的工程师在为Oracle工作。 昨天尝试确定Heisenbug时,我得出了这个结论。 不足为奇,当我尝试找到解决方案时,该错误似乎消失了。 几个小时后,将问题归结为JDK7更新之间的细微差别,该错误的“ Heisen”部分被删除。

但是回到勇敢的主张。 为了理解我所描述的情况,我将其提取到一个非常简单的测试代码段中供您尝试:

class OOM {public static void main(String[] args) {java.util.Map m = new java.util.HashMap(10_000_000);}
}

现在,当我使用JDK7u40或更高版本在64位Mac OS X上启动课程时:

my:tmp user$ /path-to/jdk1.7.0_40/bin/java -Xmx96m OOM
my:tmp user$

您会看到命令提示符返回,并且JVM成功完成了其工作。 现在,使用JDKu25或更早版本启动相同的类:

my:tmp user$ /path-to/jdk1.7.0_25/bin/java -Xmx96m OOM
Exception in thread "main" java.lang.OutOfMemoryError: Java heap spaceat java.util.HashMap.(HashMap.java:283)at java.util.HashMap.(HashMap.java:297)at OOM.main(OOM.java:3)

您会看到不同的结果。 使用100M条目初始化HashMap无法在我们的约100m堆中分配足够的资源,并且JVM退出并抛出OutOfMemoryError

在这种情况下, HashMap的来源显然是第一大嫌疑人。 的确,当您将JDK 7u25的源代码与下一个发行版(名为u40,为命名感到敬佩!)进行比较时,您会看到很大的不同。 Hashmap(initialCapacity,loadFactor)构造函数现在将忽略您构造初始大小等于initialCapacityHashMap的意愿。 取而代之的是,您看到仅当在地图上调用第一个put()方法时,基础数组才被延迟分配。

一个看似非常合理的变化– JVM在各个方面本质上都是懒惰的,所以为什么不将大型数据结构的分配推迟到迫切需要这种分配时才进行。 因此从这个意义上讲,这是一个很好的选择。

从某种意义上说,某个特定的应用程序正在通过反射执行技巧,并直接访问Map实现的内部结构,也许不是。 但是,同样,不应该绕过API并开始变得聪明,所以也许特定的开发人员现在更加相信每个新发现的概念都不适用于任何地方。

如果您是API开发人员,您是否会自己进行更改? 我不敢相信自己会有胆量,因为要知道实施过程中各种怪异的方面,大约有成千上万的应用程序在那儿。 但是我确实对JDK内的合理变更投了赞成票,并且可以肯定地说这是好的。

参考: 您是否敢更改HashMap实现? 由我们的JCG合作伙伴 Nikita Salnikov Tarnovski在Plumbr Blog博客上获得。

翻译自: https://www.javacodegeeks.com/2013/11/would-you-dare-to-change-hashmap-implementation.html

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

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

相关文章

php 函数变量的顺序,PHP实现参数的自定义顺序调用 | 剑花烟雨江南

首先我们以添加用户为例来看两个方法://方法①public function addUser(string $userName, string $userPassword, string $telephone, string $userEmail ){}//方法②public function addUser(array $data){}方法①的优点: 通过方法的定义,…

硬件信息修改大师_零成本学习之单片机硬件开发(1)

从今天开始给大家逐步讲解单片机编程,有兴趣的小伙伴们,可以关注本课程,完全免费本人从事从2004年大学毕业开始从事开发工作,先后做过单片机开发、ucOSII开发、手机开发、android APP开发、PHP开发、微信小程序开发,目…

RotateDrawable

用来对Drawable进行旋转,也是通过setLevel来控制旋转的,最大值也是:10000 相关属性如下: fromDegrees:起始的角度,,对应最低的level值,默认为0toDegrees:结束角度,对应最高的level值,默认360pivotX:设置参照点的x坐标,取值为0~1,默认是50%,即0.5pivotY:设置参照点的…

ionic3 自动创建启动背景splash以及图标icon

在新建的项目文件夹下的 resources下就是我们放置图标以及启动背景图片的位置了。 如果现在我们想生成自己的图片的启动背景以及图片,我们需要把resources下的 icon.png 以及splash.png 替换为我们的图片。 icon 图片最好为1024x1024像素 splash 图片最好为2732x2…

Spring容器的简单实现(IOC原理)

引言:容器是什么?什么是容器?Spring容器又是啥东西?我给Spring容器一个对象名字,为啥能给我创建一个对象呢? 一、容器是装东西的,就像你家的水缸,你吃饭的碗等等。 java中能作为容器…

Java:安排作业按时间间隔运行

最近,我花了一些时间围绕Neo4j版本之间的滚动升级构建了一组测试,作为其中的一部分,我想记录升级发生时的群集状态。 测试的主线程会等待升级完成,因此我想每隔几秒钟登录另一个线程。 Alistair向我指出了ScheduledExecutorServi…

epic怎么添加本地游戏_游戏日报:原神公测无法上架多家安卓渠道;Epic投资布局游戏UGC平台...

// 热点标签/// NOCITCE华为|小米|OPPO|米哈游|腾讯|莉莉丝B站|阅文集团|Epic|万国觉醒|灰烬战线FGO|怪物弹珠|勇者斗恶龙|金币大师阴阳师|和平精英|王者荣耀|三国志战略版1.华为、小米、OPPO等多家安卓渠道的《原神》版主发布公告称,因开发者要求/未与米哈游达成一…

php 出错处理,PHP 错误处理机制

在日常的项目开发过程中,总是会出现一些我们意想不到的异常错误,如果我们对此没有进行相对完善的处理,那么程序看上去也很不专业,也很可能就会成为别人攻击系统的有效信息;有些错误异常会终止脚本执行,这个…

根据location地址,在导航栏高亮显示当前页面

获取当前页面的地址栏。与导航栏中所有<a> 标签的href属性 进行比较。如果相等则高亮显示 此<a>标签。 注意点&#xff1a;a 标签的href 属性在浏览器解析时 是绝对路径。 a 标签的href 如果是锚点&#xff0c;则 pathname &#xff0c; href都与 location的 pathn…

解决关于 ionic3 启动白屏 控制台错误提示:Uncaught SyntaxError Use of const in strict mode.

今天将项目从ionic2 升级为ionic3 &#xff0c;ionic serve 运行在网页上无任何错误。 但是将项目打包成为android apk 却一直卡在启动页面 白屏&#xff0c;进不去的情况。后来在android studio 控制台看到这个错误提示&#xff1a;Uncaught SyntaxError Use of const in str…

参数与超参数

作为机器学习攻城狮&#xff08;咳咳&#xff1a;调参员&#xff09;&#xff0c;参数和超参数是最最基础的常识。 1、参数&#xff08;模型根据数据可以自动学习出的变量&#xff09; 参数指的是模型内部的配置变量(configuration variable)&#xff0c;可通过数据来估计其取值…

使用structure101分析软件包的依赖关系

稳定应用程序的一个关键是结构良好的代码库。 我们知道我们应该建立尽可能多的黑匣子&#xff0c;因为一旦完成一个黑匣子&#xff0c;我们就不必再考虑它的内部了。 您只需要使用您或其他团队成员通过明确定义的界面编写的代码即可。 这使您可以专注于要添加的下一个功能。 当…

excel高级筛选怎么用_神!Excel高级筛选原来如此好用

转自EXCE不加班这两天的宏教程都提到了高级筛选这个功能&#xff0c;不过只是用到最基本的用法。高级筛选其实是一个很好用的功能&#xff0c;今天卢子来全面讲解。1.按关键词筛选高级筛选最重要的就是条件区域&#xff0c;资产名称四门书柜&#xff0c;日期2017/1/1&#xff0…

iis7.5配置php环境,iis7.5安装配置php环境 - iis

前言iis7.5是安装在win7、win8里的web服务器&#xff0c;win2003、win2000的web服务器使用的是iis6.0&#xff0c;由于win7、win8系统相比win2003、win2000有了改新革面的不同&#xff0c;因此对于iis7.5的配置也必需捣鼓一翻才能熟悉。不过...前言iis7.5是安装在win7、win8里的…

微信小程序 网络请求之设置合法域名

设置域名 登录微信公众号后台小程序中 设置→开发设置→服务器设置 必须设置域名&#xff0c;微信小程序才能进行网络通讯&#xff0c;不然会报错 如果设置好了合法域名&#xff0c;开发工具还提示不在合法域名列表中&#xff0c;因为在微信会有一段时间的缓存&#xff0c;等…

money (dp)

牛客网暑假训练第二场D题&#xff1a; 链接&#xff1a;https://www.nowcoder.com/acm/contest/140/D来源&#xff1a;牛客网 题目描述 White Cloud has built n stores numbered from 1 to n. White Rabbit wants to visit these stores in the order from 1 to n. The store …

简而言之Java.io:22个案例研究

这篇文章试图涵盖java.io中的一整套操作。 与与此主题相关的其他书籍和博客相比&#xff0c;我的动机是通过案例研究展示“操作方法”。 作为一名Java的学生&#xff0c;我意识到学习一种新的程序语言的最有效方法是通过示例&#xff1a;复制并粘贴一段代码&#xff0c;运行它以…

php gps 坐标,php 计算gps坐标 距离

在计算机或GPS上经纬度经常用度、分、秒和度.度、分.分、秒.秒的混合方式进行表示&#xff0c;度、分、秒间的进 制是60进制&#xff0c;度.度、分.分、秒.秒的进制是100进制&#xff0c;换算时一定要注意。可以近似地认为每个纬度之间的距离是不变的111KM,每分间 1.85KM&#…

博客园如何使用MarkDown

如何使用博客园下的markdown&#xff1a;https://www.cnblogs.com/ulrica/p/8933549.html 博客园的 MarkDown 代码样式如何设置https://www.cnblogs.com/zhongxia/p/26b4b061f2a47518681bcdd4ff89c344.html 博客园 Markdown 编辑器指南http://www.cnblogs.com/qiaogaojian/p/61…

jQuery -- 光阴似箭(五):AJAX 方法

jQuery -- 知识点回顾篇&#xff08;五&#xff09;&#xff1a;AJAX 方法 1. $.ajax 方法&#xff1a;用于执行 AJAX&#xff08;异步 HTTP&#xff09;请求。 <!DOCTYPE html> <html> <head> <meta http-equiv"Content-Type" content"t…