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

系列六、ThreadLocal内存泄露案例

一、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.DiscardOldestPolicynew 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;// 手工触发GCSystem.gc();// 调用GC后不一定马上回收,模拟等待GC回收的时间Thread.sleep(50);}} catch (Exception e) {e.printStackTrace();} finally {lock.unlock();}});}System.out.println(Thread.currentThread().getName());}}

http://www.lryc.cn/news/238889.html

相关文章:

  • Java学习笔记44——Stream流
  • excel表格忘记密码,如何找回?
  • IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Mybatis初识和框架搭建
  • 差分放大器工作原理(差分放大器和功率放大器区别)
  • SystemV
  • LiteOS同步实验(实现生产者-消费者问题)
  • redis的性能管理和雪崩
  • python:关于函数内 * 和 / 是什么意思?
  • PPT密码解密,简单教程,保护幻灯片内容
  • Apache Airflow (十一) :HiveOperator及调度HQL
  • SpringBoot-Docker容器化部署发布
  • 重生奇迹mu格斗怎么加点
  • 「浙江科聪新品发布」新品发布潜伏顶升式移动机器人专用控制器
  • 大数据学习(22)-spark
  • String类常用方法总结
  • TensorFlow实战教程(二十八)-Keras实现BiLSTM微博情感分类和LDA主题挖掘分析
  • 个人博客添加访问人数以及访问时间-githubpage
  • Django--重定向redirect
  • 在html和css中的引用svg(一)
  • C/C++ 实现:自然排序:针对两个需要排序的字符串,不仅逐个比较每个字符的顺序,对于连在一起的数字字符会作为一个完整数字进行比较 某知名企业的笔试题
  • sse实时通信
  • Qt专栏3—Qt项目创建Hello World
  • linux输出的重定向无效问题和解决
  • chromium114添加新的语言国际化支持
  • 赛氪荣幸受邀参与中国联合国采购促进会第五次会员代表大会
  • 车载通信架构 —— 传统车内通信网络发展回顾
  • `maven.test.skip` 和 `skipTests` 的区别
  • linux输出的重定无效问题和解决
  • 开发上门按摩系统对技师如何管理,薪资结构怎么设计
  • 云HIS系统源码,医院管理系信息统源码,融合B/S版四级电子病历系统