场景代码大概如下: 多线程并发请求接口,接口中的代码首先从guavacache.getIfAbsent()查找对象A,假设本地内存没有,代码又调用fetchFromRedisList获取数据,获取到数据后把对象A放到本地内存中 ps:对象A极大,占用大概有几十M

问题分析:首先这里有并发问题,多个线程会同时调用fetchFromRedisList方法并购造成对象A,而不是想象中的只有一个线程去获取,其他线程等待获取结果的guavacache.get(Loadable)模式,导致内存溢出

这里最重要的是怎么从mat分析的内存发现上面的问题的,从导出的堆内存看,每个线程对象下面都"关联"了一个大的A对象,而这个对象A其实并不是FastThreadLocal对象的成员变量,那这里的"关联"是怎么回事呢,其实打开mat的分析结果可以看到线程是通过[java local]的标志关联到对象A的,也就是说是通过方法入参或者方法局部变量关联的,这样就恍然大悟了。ps: mat内存分析中的[java local]标识指方法的入参或者局部变量, [local]标识指native本地方法的变量

附gc图

mat查找多线程并发下大对象导致的堆内存问题相关推荐

  1. Java内存配太大导致fullgc_记一次因为短命大对象导致fullGC的问题

    写在前面 java内存申请和释放均是由jvm在控制.而释放往往会出现各种各样的问题,经常一个引用没处理好就引起内存泄漏,最后引发OOM.如果发生在重要业务系统还可能出现严重的生产事故. 因此内存使用一 ...

  2. 记一次生产大对象导致的OOM让架构师连夜排查解决

    为何半夜告警电话狂打不停,为何上线用户投诉不断,是道德的沦丧还是人性的扭曲,NO,是代码的缺陷. Java8的JVM内存管理中,大对象生成直接放入老年代的,当老年代空间不足,就会进行FullGC,频繁 ...

  3. 记录一次大对象导致的Java堆内存溢出问题

    问题描述 前几天早上出现一后台项目无法登陆的情况,排查发现新生代和老年代都占用100%,FullGC次数大概有100多次,最终出现OOM. 重启Tomcat后,至13点,FullGC的次数达到31次. ...

  4. 微信小程序开发-视频多大小程序就会缓存多大,导致小程序内存不足自动闪退的问题解决方法

    微信小程序开发- 一开始添加的视频是mp4 格式的,视频多大微信小程序就会缓存多大, 但是我如果直接在微信聊天打开视频链接就不会,缓存就很少. 比如我有个视频1G, 把它放到腾讯云对象存储,把视频链接 ...

  5. JVM中对象如何在堆内存分配

    在单线程的情况下 1.指针碰撞(Bump The Pointer):内存规整的情况下: 分配空间的工作只是将指针像空闲内存一侧移动对象大小的距离即可. 2.空闲列表(Free List):内存不规整的 ...

  6. 16-内存分配与回收策略-对象优先分配Eden+大对象进老年代

    1.对象优先在Eden分配 大多数情况下, 对象在新生代Eden区中分配. 当Eden区没有足够空间进行分配时, 虚拟机将发起一次Minor GC.HotSpot虚拟机提供了-XX: +PrintGC ...

  7. jvm深入理解:内存分配与回收策略(优先在Eden分配、大对象直接进入老年代、长期存活的对象将进入老年代、动态对象年龄判定、空间分配担保)

    出入:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版) Java技术体系的自动内存管理,最根本的目标是自动化地解决两个问题:自动给对象分配内存以及自动回收分配给对象的内存. 象的内存分配,从 ...

  8. 8.JVM 关于对象分配在堆、栈、TLAB的理解

    引言 我们知道,一般在java程序中,new的对象是分配在堆空间中的,但是实际的情况是,大部分的new对象会进入堆空间中,而并非是全部的对象,还有另外两个地方可以存储new的对象,我们称之为栈上分配以 ...

  9. 面性对象中栈内存和堆内存的理解

    栈和堆都是Java用来在RAM(随机只读存储器)中存放数据的地方,Java自动管理栈和堆,程序员不能直接地设置栈和堆. Java堆是运行时数据区,通过new关键字从中分配内存空间,在堆内存中产生的垃圾 ...

最新文章

  1. S/4HANA生产订单增强WORKORDER_UPDATE方法
  2. 数据绑定控件之Repeater
  3. yum 卸载php及依赖包,yum使用指南-软件卸载、安装、更新、获取软件包
  4. opencv 金字塔图像分割
  5. html选择按键点击后锁死输入框_button按钮防重复提交(点击提交之后提交按钮变灰,操作执行完之后恢复)...
  6. Java程序访问Mysql Cluster
  7. 【线上分享】机器视觉编码标准与技术进展
  8. Android中实现APP文本内容的分享发送与接收方法简述
  9. python做自动化如何定位动态元素_python-web自动化-元素定位
  10. SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一)
  11. Python3 爬虫学习笔记 C16【数据储存系列 — Redis】
  12. xamarin和mysql_Xamarin.Android 使用 SQLiteOpenHelper 进行数据库操作
  13. 台达s1变频器参数表_各大品牌变频器万能密码汇总
  14. Docker学习总结(52)—— Docker容器环境变量相关知识点的总结
  15. 电脑如何连接蓝牙音箱_蓝牙音箱如何办理SRRC认证
  16. 在Mac上安装Linux的行为是否应该被鄙视?
  17. 【重点】LeetCode 24. Swap Nodes in Pairs
  18. 变革中国:市场经济的中国之路
  19. 微信读书 iOS 性能优化总结
  20. 最新三网免挂码支付系统源码+免授权版

热门文章

  1. 吴军:站在浪潮之巅,5G 和 IoT 才是未来 10 年的浪潮 | 人物志
  2. 挥别百度,那些顶级技术人才都去哪儿了?
  3. 喜大普奔,VS Code 开启远程开发新时代!
  4. IoT 时代,安全危机爆发
  5. 中移互联网副总:创新技术如何赋能企业变现突破
  6. 程序员如何应对双十一购物的大流量冲击?
  7. 和 8 个程序员聊了一下午,集齐了这些经验!
  8. 柬埔寨程序员的计算机梦想
  9. JS、PHP、Python等五大编程语言爆漏洞;中兴 70 后程序员坠亡;雷军平定迅雷内乱 | 一周业界事
  10. 禁用oracle的默认账户,Oracle EBS默认的账户