调整许多HashMap的内部表和entrySet字段的大小。在Java 8中,创建后要占用更少的堆空间

时间:2018-12-22 09:25:21

标签: java java-8 hashmap

我们有一些在2000年代初编写的遗留代码,直到现在运行良好,除非当我们向系统中添加更多用户时,它每天都会出现OutOfMemory异常

我们将从头开始重做该项目,但是我们希望最好地使用现有的代码库。

该代码具有数千个(不是最佳设计)HashMap,这些HashMap仅在创建时循环修改,然后保持只读状态。

运行内存分析器时,它说有15%的堆由HahsMaps中未使用的空间组成。

对于这些实例,如果我们使用反射使条目集可访问并调整其大小以使其大小等于实际所需的大小,则迭代器会失败吗?

在初始构造后,这些映射是只读缓存。我们正在Java 6上运行代码,而在Java 8上运行了很少的实例。将不会升级JVM版本,在另外的10到12个月内,新代码将投入生产并替换当前版本。

我知道在创建哈希映射时我们可以提供更好的初始大小,但是与一个基于当前大小调整映射大小的函数相比,这需要大量工作。此外,大多数地图都是库的一部分(我没有访问源代码的权限),而这些都不会暴露接受大小的构造函数。他们只调用其内部HashMap的默认构造函数。

0 个答案:

没有答案