专栏名称: 阿里云开发者
阿里巴巴官方技术号,关于阿里的技术创新均将呈现于此
TodayRss-海外RSS稳定源
目录
相关文章推荐
今天看啥  ›  专栏  ›  阿里云开发者

重构一个类,JVM竟省下2.9G内存?

阿里云开发者  · 公众号  · 科技公司  · 2025-11-07 08:30
    

主要观点总结

文章讲述了对Java内存优化的案例,通过对核心类数据结构的重构,使得JVM堆内存直降2994MB,从3205MB降至211MB,效果显著。通过深度统计标签分布,发现大部分商品标签数极少且有界,选择了更紧凑、高效的数据结构Long2ObjectOpenHashMap来替代原有的HashMap,进一步压缩内存。同时,采用排序后的int数组和二分查找替代HashSet,降低了内存占用。文章还详细解释了Long2ObjectOpenHashMap的工作原理和底层实现,以及为何它能成为优化内存的有效方案。

关键观点总结

关键观点1: 优化效果

仅重构一个类,JVM堆内存直降2994MB,从3205MB降至211MB,效果显著。

关键观点2: 背景与问题

在核心业务链路中,有一个关键接口需要动态过滤商品标签,设计了一个以城市ID为键、商品标签集合为值的内存数据结构,并辅以本地缓存。但在十万级商品 × 万级城市 × 多标签的规模下,通用集合嵌套设计成为内存消耗的“沉默杀手”。

关键观点3: 老结构内存分析

发现标签被表示为String类型,导致内存浪费。分析后,发现标签数极少且有界,无需动态扩容的复杂集合,排序+二分查找成为高性价比方案。

关键观点4: 新结构方案选型

筛选最优组合,将HashMap替换为FastUtil的Long2ObjectOpenHashMap,将HashSet替换为排序后的int数组和二分查找,带来显著的内存压缩效果。

关键观点5: Long2ObjectOpenHashMap详解

详细介绍了Long2ObjectOpenHashMap的底层实现和原理,包括底层存储结构、哈希函数与索引计算、冲突处理过程、get()和删除操作的挑战等。

关键观点6: 小结

本次优化的核心是将HashMap重构为Long2ObjectOpenHashMap,带来内存占用的显著下降,同时提醒开发者要警惕隐形内存黑洞,并考虑资源成本,优化系统设计。


免责声明:本文内容摘要由平台算法生成,仅为信息导航参考,不代表原文立场或观点。 原文内容版权归原作者所有,如您为原作者并希望删除该摘要或链接,请通过 【版权申诉通道】联系我们处理。

原文地址:访问原文地址
总结与预览地址:访问总结与预览
文章地址: 访问文章快照