ThreadLocal内存泄漏分析
java1234
共 9556字,需浏览 20分钟
· 2021-05-16
点击上方蓝色字体,选择“标星公众号”
优质文章,第一时间送达
引言
ThreadLocal内存泄漏的原因
代码验证
package quickstart;
import java.util.ArrayList;
import java.util.List;
public class TestThreadLocalMemoryLeak {
public static void main(String[] args) {
ttt(null);
while (true){
try{
Thread.sleep(1000 * 2);
}catch (Exception e){
e.printStackTrace();
}
}
}
public static void ttt(String[] args) {
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("==================");
leak();
try{
Thread.sleep(1000 * 60);
}catch (Exception e){
e.printStackTrace();
}
}
private void leak(){
List<Double> list = new ArrayList<>();
for (int i = 0; i < 10000000; i++) {
list.add(Math.random());
}
ThreadLocal<List> listThreadLocal
= new ThreadLocal<>();
listThreadLocal.set(list);
}
};
Thread thread = new Thread(runnable);
System.out.println("thread start");
thread.start();
try{
thread.join();
}catch (Exception e){
e.printStackTrace();
}
System.out.println("thread end");
}
}
你能明白下面的程序为啥不会构成内存泄漏吗?
package quickstart;
import java.util.ArrayList;
import java.util.List;
public class TestThreadLocalMemoryLeak {
public static void main(String[] args) {
ttt(null);
}
public static void ttt(String[] args) {
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("==================");
leak();
try{
Thread.sleep(1000 * 60);
}catch (Exception e){
e.printStackTrace();
}
}
private void leak(){
List<Double> list = new ArrayList<>();
for (int i = 0; i < 10000000; i++) {
list.add(Math.random());
}
ThreadLocal<List> listThreadLocal
= new ThreadLocal<>();
listThreadLocal.set(list);
}
};
Thread thread = new Thread(runnable);
System.out.println("thread start");
thread.start();
try{
thread.join();
}catch (Exception e){
e.printStackTrace();
}
System.out.println("thread end");
while (true){
try{
Thread.sleep(1000 * 2);
System.out.println(thread);
}catch (Exception e){
e.printStackTrace();
}
}
}
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:
https://blog.csdn.net/xiaolixi199311/article/details/116565875
粉丝福利:Java从入门到入土学习路线图
👇👇👇
👆长按上方微信二维码 2 秒
感谢点赞支持下哈
评论
英伟达Blackwell平台网络配置分析
本文来自“英伟达Blachwell平台网络配置详解”。GTC大会英伟达展示了全新的 Blackwell 平台系列产品,包括 HGX B100 服务器、NVLINK Switch、GB200Superchip Computer Node、Quantum X800 交换机和 CX8 网卡(InfiniB
架构师技术联盟
0
CXL:破解AI时代“内存墙”新途径
AI大模型的快速发展推动“算力”和“存力”需求快速增长,“内存墙”问题由来已久,在 AI 时代表现的愈发明显,“算力”和“运力”之间的差距越来越大。Transformer 类的模型参数的数量呈现指数增长,每两年增加 410 倍,而 GPU 内存仅以每两年 2 倍的速度扩展。1、AI时代“内存墙”问题
架构师技术联盟
0
管理世界2024 | 使用管理层讨论与分析测量「企业人工智能指标」
Tips: 公众号推送后内容只能更改一次,且只能改20字符。如果内容出问题,或者想更新内容, 只能重复推送。为了更好的阅读体验,建议阅读本文博客版, 链接地址 https://textdata.cn/blog/2024-04-19-ai-improve-firm-productivity/
大邓和他的Python
0
从原理到实践:掌握DPDK内存池技术
前言:本文整理下之前的学习笔记,基于DPDK17.11版本源码分析。主要分析一下内存管理部分代码。一、概述内存管理是数据面开发套件(DPDK)的一个核心部分,以此为基础,DPDK的其他部分和用户应用得以发挥其最佳性能。本系列文章将详细介绍DPDK提供的各种内存管理的功能。但在此之前,有必要先谈一谈为
开源Linux
0
推荐 | 文本分析库cntext2.x使用手册
Tips: 公众号推送后内容只能更改一次,且只能改20字符。 如果内容出问题,或者想更新内容, 只能重复推送。 为了更好的阅读体验,建议阅读本文博客版, 链接地址https://textdata.cn/blog/2024-04-27-cntext2x-usage-tutorial/cntext是大邓
大邓和他的Python
1
展讯平台手机重启问题分析指南
和你一起终身学习,这里是程序员Android经典好文推荐,通过阅读本文,您将收获以下知识点:一、 User 版本 默认开启 sysdump 方法二、插入SD卡 抓取Sysdump log三、 sysdump log 分析四、展讯平台抓取重启 串口log的方案五、展讯平台判断重启类型六、展讯平台关闭
程序员Android
0
得物面试:Redis 内存碎片是什么?如何清理?
JavaGuide官方网站:javaguide.cn这是一道不是特别高频但很重要的 Redis 面试题,属于 Redis 性能优化的范畴。Redis 内存碎片相关的问题在得物、美团、阿里、字节、携程等公司的后端面试中都曾出现过,还是建议认真准备一下。即使不是准备面试,日常开发也是能够用到的!什么是内
JavaGuide
0
为啥我敢说Python是数据分析界的扛把子语言?
首先声明下这篇文字不是卖课的,也不是无脑吹Python,咱只讲事实,认认真真讨论下Python是不是数据分析领域最好的语言。因为我在知乎上看到非常多人在问这个问题,想必大家是关心的。我的观点是,目前来看所有编程语言里,做数据分析Python是最好的选择,没有之一。列举几个事实:1、Kaggle、天池
Python大数据分析
9