FuLLGC模拟及结果流程

news2024/11/26 10:01:52

内存泄漏、内存溢出、CPU飙升三者之间的关系

内存泄露可能会导致内存溢出。 内存溢出会抛出异常,内存泄露不会抛出异常,大多数时候程序看起来是正常运行的。 内存泄露的程序,JVM频繁进行FullGC尝试释放内存空间,进而会导致CPU飙升 内存泄露过多,造成可回收内存不足,程序申请内存失败,结果就是内存溢出。

 

内存溢出案例分析
一般来说内存溢出主要分为以下几类:

堆溢出(java.lang.OutOfMemoryError: Java heap space) 最常见最复杂情况
栈深度不够( java.lang.StackOverflowError) 需关注配置项 -Xss大小
栈线程数不够(java.lang.OutOfMemoryError: unable to create new native thread)
 

1、哪些会造成OOM(内存泄漏)?

(1)ThreadLocal的错误使用导致内存泄漏

ThreadLocal可能引起的OOM内存溢出问题简要分析

我们知道ThreadLocal变量是维护在Thread内部的,这样的话只要我们的线程不退出,对象的引用就会一直存在。当线程退出时,Thread类会进行一些清理工作,其中就包含ThreadLocalMap,Thread调用exit方法,但是,当我们使用线程池的时候,就意味着当前线程未必会退出(比如固定大小的线程池,线程总是存在的)。如果这样的话,将一些很大的对象设置到ThreadLocal中(这个很大的对象实际保存在Thread的threadLocals属性中),这样的话就可能会出现内存溢出的情况。

一种场景 就是说如果使用了线程池并且设置了固定的线程,处理一次业务的时候存放到

ThreadLocalMap中一个大对象,处理另一个业务的时候,又一个线程存放到ThreadLocalMap中一个大对象,但是这个线程由于是线程池创建的他会一直存在,不会被销毁,这样的话,以前执行业务的时候存放到ThreadLocalMap中的对象可能不会被再次使用,但是由于线程不会被关闭,因此无法释放Thread 中的ThreadLocalMap对象,造成内存溢出。

也就是说,ThreadLocal在没有线程池使用的情况下,正常情况下不会存在内存泄露,但是如果使用了线程池的话,就依赖于线程池的实现,如果线程池不销毁线程的话,那么就会存在内存泄露

故事线:

OOM   =>   FullGC

ThreadLocal  +  线程池

① 在没有使用线程池时,使用ThreadLocal并没有问题
② 在使用线程池后,发生了内存泄漏,最终排查到发生了fullGC
③ 排查之后,发现不合理点:》不能将大对象全部放到ThreadLocal中
                                                》线程执行结束后一定要执行remove方法

知识点:① 线程池原理   ② ThreadLocal实现原理、存储原理、数据结构   ③ FullGC相关JVM

具体讲解:

     ① ---->线程池原理:

线程池状态转移过程:

 ② ThreadLocal实现原理、存储原理、数据结构

 

 

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

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

相关文章

能流畅运行OctaneRender 的硬件建议

OctaneRender 是一个完全基于 GPU 的渲染引擎。这意味着系统中的显卡(或 GPU)会影响渲染完成所需的时间,而不是 CPU。 处理器(CPU) 在 OctaneRender 以及大多数其他基于 GPU 的引擎中,CPU 在渲染场景的过程…

Flutter流式组件Wrap

Wrap组件类似Row组件都是横向依次排列,唯一的区别就是Wrap能自动换行。 主要代码: Wrap(spacing: 10, //左右间距runSpacing: 10, //上下间距// direction: Axis.vertical,//主轴的方向,默认横向// alignment: WrapAlignment.spaceBetween, …

【Element】Tree 树形控件

使用el-tree完成下拉框单选功能 <label class"handle-label">部门:</label> <el-select v-model"bm" ref"selectTree" class"wd150" placeholder"请选择" clearable clear"handleTreeClear">…

Aop基于xml和注解应用

基于 XML 的 AOP 开发 问题1&#xff1a;在通知方法中如何定义切入点表达式&#xff1f; 问题2&#xff1a;如何配置切面&#xff1f; 问题3&#xff1a;在配置类上如何开启AOP注解功能&#xff1f; 1.1 快速入门 ①导入 AOP 相关坐标 ②创建目标接口和目标类&#xff08…

linux环境安装docker+confluence

前言 本次安装的环境 centos 7.6 一、安装docker 1、yum安装docker 更新yum yum update yum安装docker yum install docker 2、开启镜像加速 mkdir /etc/docker vi /etc/docker/daemon.json 3、启动docker 查看docker版本 docker --version 启动docker service docker s…

ps 2023(24.7beta) mac

Photoshop 2023 beta,一款专业图像处理软件&#xff0c;它主要用于图像编辑、合成和设计等方面。Photoshop beta创新式填充是Adobe Photoshop的一项新功能&#xff0c;它可以自动识别和删除照片中的对象并用周围的图像填充空白部分。这个新功能使用了人工智能和机器学习技术&am…

直线模组在新能源汽车中的应用

发展新能源汽车是我国从汽车大国迈向汽车强国的必由之路&#xff0c;是应对气候变化、推动绿色发展的战略举措&#xff0c;新能源汽车免征车辆购置税政策的延续&#xff0c;能够稳定促进新能源汽车发展&#xff0c;加速新能源车对于燃油车的全面替代。 直线模组技术的飞速发展&…

Doris实战篇-准实时数仓架构设计与实现

前言 这是一篇Doris数据仓库架构随笔&#xff0c;会应用到一些优秀的用户案例和自己的见解&#xff0c;欢迎大家留言评论。 前景回顾 下图是之前文章有提到过的数仓架构&#xff0c;这种架构的好处是实时强&#xff0c;数据产生以后&#xff0c;直接可以消费到&#xff0c;而…

【网络安全】带你了解【黑客】

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 引言 1. 定义 2. 分类 a. 白帽黑客&#xff08;White Hat Hacker&#xff09; b. 黑帽黑客&#xff08;Black Hat Hacker&#xff09; c. 灰帽黑客&#xff08;Gray Hat Hacker…

【Docker】Docker中 AUFS、BTRFS、ZFS、存储池概念的详细讲解

前言 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 &#x1f4d5;作者简介&#xff1a;热…

企业如何搭建一个出色的帮助中心?做好这6点很重要!

伴随着互联网的不断普及和快速发展&#xff0c;我们的生活已经发生了翻天覆地的改变&#xff0c;企业的商业模式也不断地适应着时代。为了提供给用户更加便捷的服务&#xff0c;逐渐地有更多企业将业务转移到线上。比如&#xff0c;餐馆为了解决点餐难题&#xff0c;就会上线点…

LINUX IOWAIT 是怎么回事,和数据库性能有关吗? (翻译)

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

Redis线程模式

目录 redis6.0之前&#xff1a;单Reactor单线程 问&#xff1a;为什么Redis要选择单线程&#xff1f;&#xff1f;&#xff1f; redis6.0后引入多线程IO redis6.0之前&#xff1a;单Reactor单线程 大致工作流程&#xff1a; 首先&#xff0c;调用 epoll_create() 创建一个 …

剑指 Offer 17: 打印从1到最大的n位数

首先&#xff0c;List类型的要么存Integer&#xff0c;要么存int[]&#xff0c;并且后面实现是用ArrayList&#xff01; 这边的i和j应该从1开始&#xff0c;因为0不能做高位也不能做位数。 这里注意&#xff0c;1是List的实现是用ArrayList&#xff0c;2是从1开始&#xff08;1…

C++的引用 拷贝赋值和引用赋值

&#x1f4af; 博客内容&#xff1a;C的引用 拷贝赋值和引用赋值 &#x1f600; 作  者&#xff1a;陈大大陈 &#x1f680; 个人简介&#xff1a;一个正在努力学技术的准前端&#xff0c;专注基础和实战分享 &#xff0c;欢迎私信&#xff01; &#x1f496; 欢迎大家&#…

排名前十的开放式蓝牙耳机,哪个蓝牙耳机好一点?

当前耳机最大的受众群体就是年轻人&#xff0c;最怕自己吵到别人&#xff0c;而且更注重自己的舒适度&#xff0c;所以开放式耳机自从出现以来就深受年轻人喜爱&#xff0c;这种耳机用起来很方便&#xff0c;而且振动感不强&#xff0c;不用进入耳道&#xff0c;拥挤耳朵。开放…

C++图形开发(8):空格键控制小球起跳

文章目录 1.绘制小球2.按下空格让小球跳起来 我们今天来实现下按下空格键控制小球的起跳&#xff08;还没阅读之前文章的同学可以先去阅读一下&#xff1a;C图形开发专栏&#xff09; 1.绘制小球 首先&#xff0c;我们要绘制小球&#xff0c;这里就不细讲啦&#xff0c;之前的…

4.1 探索LyScript漏洞挖掘插件

在第一章中我们介绍了x64dbg这款强大的调试软件&#xff0c;通过该软件逆向工程师们可以手动完成对特定进程的漏洞挖掘及脱壳等操作&#xff0c;虽然x64dbg支持内置Script脚本执行模块&#xff0c;但脚本引擎通常来说是不够强大的&#xff0c;LyScript 插件的出现填补了这方面的…

2020~2030年 中国智能驾驶市场和技术趋势分析及主流芯片方案概述

分析及主流芯片方案概述智能驾驶已经成为中国用户买车时首选的配置之一&#xff0c;从L0到L2的整个产品布局&#xff0c;已经是车厂卖车时候的重点宣传点&#xff0c;智能驾驶不同于自动驾驶&#xff0c;无论是法律法规和产品定义都有着明确且清晰的定义。用户本身智能驾驶产品…

十个创业九个死,如何看待大学生创业?

虽然大家都在说“十个创业九个死”&#xff0c;尤其是前几年疫情的影响&#xff0c;很多创业和开店铺的都以失败告终&#xff0c;可是对于大学生来说&#xff0c;创业是很值得去做的一件事情。 熟悉我的朋友都知道&#xff0c;我是从事软件开发行业的&#xff0c;虽然前几年的…