系列六、ThreadLocal内存泄漏案例

news2024/9/22 21:29:54

一、内存泄漏 vs 内存溢出

内存泄漏:内存泄漏是指程序中已经动态分配的堆内存由于某种原因程序未释放或者无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至导致系统崩溃等严重后果,内存泄漏最终                    会导致内存溢出;

内存溢出:内存溢出是指没有足够的内存供申请者使用;

二、ThreadLocal内存泄漏案例

/**
 * @Author : 一叶浮萍归大海
 * @Date: 2023/11/22 10:56
 * @Description: 写一段代码导致内存泄露
 * VM Options:-Xms20m -Xmx20m -Xmn10m -XX:+PrintGCDetails
 * 说明:内存泄露最终会导致内存溢出
 */
public class ThreadLocalOomMainApp {

    public static void main(String[] args) {
        // 可重入锁
        Lock lock = new ReentrantLock();

        // 是否调用remove()方法
        boolean remove = false;

        // 线程池
        ExecutorService pool = new ThreadPoolExecutor(
                2,
                10,
                2L,
                TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(20),
                Executors.defaultThreadFactory(),
                // new ThreadPoolExecutor.AbortPolicy
                // new ThreadPoolExecutor.CallerRunsPolicy
                // new ThreadPoolExecutor.DiscardOldestPolicy
                new ThreadPoolExecutor.DiscardOldestPolicy());

        for (int i = 1; i <= 20; i++) {
            pool.execute(() -> {
                try {
                    lock.lock();
                    // 为了不重复使用线程,使用map标记已经使用过的线程
                    Map<Long, Integer> map = new ConcurrentHashMap<>(10);
                    Integer num = map.putIfAbsent(Thread.currentThread().getId(), 1);
                    if (num == null) {
                        ThreadLocal<Byte[]> threadLocal = new ThreadLocal<>();
                        threadLocal.set(new Byte[1024 * 1024]);
                        if (remove) {
                            // 解决内存泄露的关键
                            threadLocal.remove();
                        }
                        // 将threadLocal置位空,利于GC回收
                        threadLocal = null;
                        // 手工触发GC
                        System.gc();

                        // 调用GC后不一定马上回收,模拟等待GC回收的时间
                        Thread.sleep(50);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    lock.unlock();
                }
            });
        }

        System.out.println(Thread.currentThread().getName());

    }

}

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

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

相关文章

2023年中国高压驱动芯片分类、市场规模及发展趋势分析[图]

高压驱动芯片是一种能在高压环境下工作的集成电路&#xff0c;主要用于控制和驱动各种功率器件&#xff0c;如继电器、电磁阀、电机、变频器等。高压驱动芯片根据其输出电流的大小和形式可分为两类恒流型和开关型。 高压驱动芯片分类 资料来源&#xff1a;共研产业咨询&#x…

CorelDRAW2024有哪些新功能?如何下载

作为一个广告设计者怎么能不会一两款专业设计软件&#xff0c;Adobe公司的PS、AI和Corel公司的CorelDRAW都是常用的图片处理软件&#xff0c;也是市场上同类设计软件中的翘楚。针对不同的设计任务选择不同的设计软件&#xff0c;才能提高工作效率&#xff0c;事半功倍。 Corel…

七个步骤 从零到servlet第一个hello

目录 Tomcat安装 Servlet 1.引入项目 2.引入依赖 3.创建目录 1.创建 webapp 目录 2.创建 web.xml 3.编写 web.xml 4.编写代码 5.打包程序 6.部署程序 7.验证程序 Smart Tomcat Tomcat安装 在动漫世界&#xff0c;我们有汤姆猫 在Java世界&#xff0c;同样也有一个…

精彩预告 | OpenHarmony即将亮相MTSC 2023

MTSC 2023 第12届中国互联网测试开发大会&#xff08;深圳站&#xff09;即将于2023年11月25日&#xff0c;在深圳登喜路国际大酒店举办&#xff0c;大会将以“1个主会场4个平行分会场”的形式呈现&#xff0c;聚集一众顶尖技术专家和行业领袖&#xff0c;围绕如今备受关注的行…

redis之主从复制和哨兵模式

&#xff08;一&#xff09;redis的性能管理 1、redis的数据缓存在内存中 2、查看redis的性能&#xff1a;info memory&#xff08;重点&#xff09; used_memory:904192&#xff08;单位字节&#xff09; redis中数据占用的内存 used_memory_rss:10522624 redis向操作系统…

锯木棍

题目描述 有一根粗细均匀长度为 L 的木棍&#xff0c;先用红颜色刻度线将它 m 等分&#xff0c;再用蓝色刻度线将 其 n 等分&#xff08; m>n &#xff09;&#xff0c;然后按所有刻度线将该木棍锯成小段&#xff0c;计算并输出长度最长的木棍的长度和根数。 输入格式…

(内部资料)收下这几个人工智能学习秘籍!

秘籍一&#xff1a;练好基本功 学习基础知识&#xff1a;人工智能涉及多个学科领域&#xff0c;包括数学、计算机科学、统计学等。因此&#xff0c;学习基础知识是非常重要的。您可以通过学习线性代数、概率论和微积分等数学基础知识&#xff0c;以及掌握Python编程语言和常用…

Linux学习笔记-Ubuntu下使用Crontab设置定时任务

文章目录 一、概述二、基于crontab的设置2.1 基本命令说明2.2 使用-e指令编辑命令2.2.1 进入编辑模式2.2.2 指令信息格式2.2.4 开启日志1) 修改rsyslog配置文件2) 重启rsyslog3) 查看日志 2.2.3 设置后之后重启服务 三、示例3.1 每隔一分钟往文件中日期3.2 使用-l查看任务列表3…

微软重磅发布4个适合初学者的机器学习资料

自媒体火起来后&#xff0c;很多科技大佬都开始写博客&#xff0c;录视频了&#xff0c;大佬一入行&#xff0c;整个行业卷上天&#xff0c;像我这样的也只能走资源整合之路了&#xff0c;不过这样也好&#xff0c;科技进步&#xff0c;人类发展需要他们。 除了个人&#xff0…

深度学习常见激活函数:ReLU,sigmoid,Tanh,softmax,Leaky ReLU,PReLU,ELU整理集合,应用场景

文章目录 1、ReLU 函数&#xff08;隐藏层中是一个常用的默认选择&#xff09;1.1 优点1.2 缺点 2、sigmoid 函数2.1 优点2.2 缺点 3、Tanh 函数3.1 优点3.2 缺点 4、softmax 函数&#xff08;多分类任务最后一层都会使用&#xff09;5、Leaky ReLU 函数5.1 优点5.2 缺点 6、PR…

KDE 项目发布了 KDE Gear 23.08.3

导读KDE 项目发布了 KDE Gear 23.08.3&#xff0c;作为最新的 KDE Gear 23.08 开源集合的第三次维护更新&#xff0c;该集合包含了用于 KDE Plasma 桌面环境和其他平台的 KDE 应用程序。 KDE Gear 23.08.3 是在 KDE Gear 23.08.2 大约一个月之后发布的&#xff0c;包含了更多对…

Maven中常用命令以及idea中使用maven指南

文章目录 Maven 常用命令compiletestcleanpackageinstallMaven 指令的生命周期maven 的概念模型 idea 开发maven 项目idea 的maven 配置idea 中创建一个maven 的web 工程在pom.xml 文件添加坐标坐标的来源方式依赖范围编写servlet maven 工程运行调试 Maven 常用命令 compile …

阿里云高效计划学生和老师免费代金券申请认证方法

阿里云高校计划学生和教师均可参与&#xff0c;完成学生认证和教师验证后学生可以免费领取300元无门槛代金券和3折优惠折扣&#xff0c;适用于云服务器等全量公共云产品&#xff0c;订单原价金额封顶5000元/年&#xff0c;阿里云百科aliyunbaike.com分享阿里云高校计划入口及学…

掌握技术访谈:CNN、Seq2Seq、Faster R-CNN 和 PPO — 揭开卓越编码和创新之路

一、说明 本文 揭开CNN、Seq2Seq、Faster R-CNN 和 PPO — 编码和创新之路。对于此类编程的短小示例&#xff0c;用于开发时临时参考。 二、数据准备 问题陈述&#xff1a;在本次挑战中&#xff0c;您将深入计算机视觉世界并使用卷积神经网络 (CNN) 解决图像分类任务。您将使用…

Figma最全面的新手指南,从基础到高级,一网打尽

1 Figma界面介绍 Figma基础界面与传统设计软件没有太大区别&#xff0c;有Sketch使用经验的用户几乎可以无缝连接到Figma。 立即体验 免费的在线Figma汉化版即时设计是一款支持在线协作的专业级 UI 设计工具&#xff0c;支持 Sketch、Figma、XD 格式导入&#xff0c;海量优质设…

4.2V升多串LED驱动升压6V9V12V恒流点灯

4.2V升多串LED驱动升压6V9V12V恒流点灯 探索WT7012&#xff0c;这款引领潮流的升压转换器&#xff0c;其强大功能将彻底改变您的LED驱动格局。可以轻松驾驭多达7串白光LED&#xff0c;展现出无与伦比的驱动能力。 无论是单节锂电池还是多节锂电池供电产品&#xff0c;宽电压3…

Centos8上部署MySQL主从备份

虚拟机环境如下&#xff1a; Node1192.168.1.110Centos8 Node2192.168.1.111Centos8 1.在Node1和Node2上安装数据库&#xff1b; yum install -y mysql* 2.关闭防火墙服务&#xff0c;关闭开启自启&#xff1b; systemctl stop firewalld systemctl disable firewall…

人工智能中的文本分类:技术突破与实战指导

在本文中&#xff0c;我们全面探讨了文本分类技术的发展历程、基本原理、关键技术、深度学习的应用&#xff0c;以及从RNN到Transformer的技术演进。文章详细介绍了各种模型的原理和实战应用&#xff0c;旨在提供对文本分类技术深入理解的全面视角。 关注TechLead&#xff0c;分…

使用内网穿透工具实现远程访问本地部署的Odoo企业管理系统

文章目录 前言1. 下载安装Odoo&#xff1a;2. 实现公网访问Odoo本地系统&#xff1a;3. 固定域名访问Odoo本地系统 前言 Odoo是全球流行的开源企业管理套件&#xff0c;是一个一站式全功能ERP及电商平台。 开源性质&#xff1a;Odoo是一个开源的ERP软件&#xff0c;这意味着企…

【高性能计算】CUDA,OpenCL,FPGA 加速,MPI

OpenCL OpenCL&#xff08;Open Computing Language&#xff09;是一种跨平台的GPU加速技术&#xff0c;由Khronos Group开发。OpenCL允许开发人员在不同的硬件平台上编写并行计算应用程序。 OpenCL使用C语言的子集来编写应用程序&#xff0c;并提供了一组API&#xff0c;可以…