当前位置: 首页 > news >正文

科普篇之Java堆内缓存优化-IntegerCache的使用

如果当堆内缓存中存在大量重复的Long或Integer(有限个且稠密的,如果不稠密需自己实现IntegerCache),我们首先想到的是能不能把Integer缓存到一个Map中,当Map中存在时就使用Map中的Integer,Map中不存在时就new一个Integer放进去,Long或Integer的cache所实现的功能

以直播场景为例,在直播推荐系统中,主播的状态是实时变化的,为了实时获取主播的实时状态,会对主播的直播画面进行截图进行ai识别,对主播打上一系列标签,比如唱歌,跳舞,静音,挂屏

对正在直播的主播每5s输出一次识别结果,一次识别结果中包含50多种标签,每个主播会缓存最近120个识别结果

假如在4000个主播正在直播,那么内存中就会存在4000*120*50=24000000,2千多万重复的主播标签id,而标签id在我们系统中要么是String,要么是Integer,对于String类型的我们可以用String.intern()优化,对于Integer类型的我们可以利用IntegerCache优化

IntegerCache默认是缓存-128~128的整型,ai识别结果最大为5091,需增加jvm启动参数-Djava.lang.Integer.IntegerCache.high=8192,并使用Integer.valueOf来获取Integer对象即可

在我们的场景中使用String.intern()和IntegerCache优化ai标签后通过对比垃圾回收后的内存占用,粗略估计减少了近4G的内存使用

优化前

优化后

观察字符串常量池,大小是动态变化的,运行时常量可被gc正常回收

相关文章:

  • 边缘计算概念、厂商介绍及产业分析
  • 软件架构设计7大原则
  • 面试八股文--数据库基础知识总结(3)MySQL优化
  • 使用Windbg分析dump文件定位软件异常的方法与操作步骤
  • pandas如何在指定位置添加一个dataframe
  • 力扣hot100刷题——栈
  • 【大模型系列篇】国产开源大模型DeepSeek-V3技术报告解析
  • quillEditor 禁用复制粘贴图片,以及class转style等问题
  • 【C++ 函数重载】—— 现代编译技术下的多态表达与性能优化
  • 【leetcode hot 100 56】合并区间
  • 【计算机网络】Socket
  • CSDN markdown 操作指令等
  • 动漫短剧开发公司,短剧小程序搭建快速上线
  • Springboot整合WebSocket+Redis以及微信小程序如何调用
  • 2000-2020年各省地方财政一般预算收入数据
  • 【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-附录B-严格模式
  • FastGPT 源码:基于 LLM 实现 Rerank (含Prompt)
  • 深度学习-142-Text2SQL之基于langchain的少量样本提示词模板FewShotPromptTemplate的应用基础(一)
  • maven推送jar包到nexus
  • 前端大文件上传
  • 用dw做网站怎么添加背景图片/高级seo培训
  • 西安市做网站的公司/矿坛器材友情交换
  • perl网站建设/搜索引擎优化是什么
  • 白领兼职做网站/免费做网站怎么做网站吗
  • 做川菜的网站/百度网盘登录入口网页版
  • 建设网站以后怎么让百度收录呢/工作手机