强软弱虚ThreadLocal

【Java】强软弱虚四种引用,弱引用在ThreadLocal中的应用 Java中的引用类型 - 强软虚弱 强引用 Object strongReference = new Object(); 强引用就是普通的引用 只要有引用指向它,就不会被回收。就算内存满了也不会回收, 软引用 内存空间不够时,弱引用会被回收 设置堆内存最大20M 插入15M的强引用之后,堆空间不足了,软引用被干掉了。 软引用有什么作用?用于缓存。缓存可以做成软引用:内存不够的时候,踢... 阅读详情

在这里插入图片描述
强引用:不管内存够不够都不会被回收我们平时new创建对象就是强引用,内存泄露也不回收。
软引用: 内存够用不回收,不够用就被回收(非常适合缓存,比如缓存图片)
弱引用: 只要发送GC就会被回收,spring,mybatis,threadlocal
虚引用: get()获取不到对象,一般结合引用队列使用 ,jvm直接操作内存,directBuffer
ThreadLocal:

  public void set(T value) {
        Thread t = Thread.currentThread();
        ThreadLocalMap map = getMap(t);
        if (map != null)
            map.set(this, value);
        else
            createMap(t, value);
    }
 private void set(ThreadLocal<?> key, Object value) {

            // We don't use a fast path as with get() because it is at
            // least as common to use set() to create new entries as
            // it is to replace existing ones, in which case, a fast
            // path would fail more often than not.

            Entry[] tab = table;
            int len = tab.length;
            int i = key.threadLocalHashCode & (len-1);

            for (Entry e = tab[i];
                 e != null;
                 e = tab[i = nextIndex(i, len)]) {
                ThreadLocal<?> k = e.get();

                if (k == key) {
                    e.value = value;
                    return;
                }

                if (k == null) {
                    replaceStaleEntry(key, value, i);
                    return;
                }
            }

            tab[i] = new Entry(key, value);
            int sz = ++size;
            if (!cleanSomeSlots(i, sz) && sz >= threshold)
                rehash();
        }
  ThreadLocalMap getMap(Thread t) {
        return t.threadLocals;
    }

每个线程都有threadLocals map,
this:当前threadlocal对象
value:当前传入的值
this,value 构造成Entry传入到map

key 就是应用到虚引用

内存泄露:
1、如果key虚引用被回收,不及时删除value会造成内存泄露
2、线程池,每一个线程池用完必须清空threadLocals 这个静态map,不然下次使用有可能造成内存泄露。

原因解释:设置了threadlocal并且赋了值,但是他没有强引用。那么当第一次GC的时候,entry里的key会被清空,value保留值。但是仅仅这样也是不会oom,还要有2个条件。

①就是所运行的线程不能结束,因为线程结束threadlocalmap也没了,自然不会oom。

②线程运行过程中不再执行set、get、remove命令

当线程运行过程中发生了GC,那么会留下一个空key的entry。并且没有执行set、get、remove,因为这3个命令都会清空key为null的entry。当满足这两个条件,请求线程再多一点,就会出现oom了。

S32DS新建工程、编译调试下载、导入工程详细介绍 新建了一个工程之后,下面简单介绍下基本的UI界面。其中最左下角那个是界面,这个界面很重要,是图形化配置界面,然后可以根据这些配置自动生成代码。其中,左边那些配置文件,都是系统帮我们创建好了的,我们其实可以直接用就行。有PE工具的调试,以及Jlink工具的调试。我目前使用到PE工具调试可以查看寄存器值,而Jlink调试查看不了寄存器值。连接了开发板之后,点击Debug就可以吧程序下载到芯片上了,而且可以进入到调试界面。 阅读详情

相关推荐

Linux单独编译设备树,开发者分享 | Petalinux 工程中设备树的介绍

本文来自XILINX嵌入式产品应用工程师 Terry Ni设备树是 Petalinux kernel 的关键组件,接下来以 2020.1 版本为例,为大家介绍一下在Xilinx Petalinux 工程中的设备树是如何产生,配置以及修改的。Petalinux 工程中设备树的位置当我们创建了一个 petalinux 工程后(以zcu102为例),在编译的时候,会自动生成对应的设备树文件。这些设备树的...

weixin_28877107的博客 2578

ThreadLocal之强、弱、软、虚引用

ThreadLocal提供线程局部变量。这些变量与正常的变量不同,因为每一个线程在访问ThreadLocal实例的时候(通过其get或set方法)都有自己的、独立初始化的变量副本。ThreadLocal实例通常是类中的私有静态字段,使用它的目的是希望将状态(例如,用户ID或事务ID)与线程关联起来。实现每一个线程都有自己专属的本地变量副本(自己用自己的变量不麻烦别人,不和其他人共享,人人有份,人各一份),主要解决了让每个线程绑定自己的值,通过使用get() 和set() 方法,获取默认值或将其值更改为当前线

Lifelong learning 6139

安卓7.0+抓包难题:雷电模拟器9.0+Charles系统证书安装全攻略

HTTPS协议通过SSL/TLS加密保障网络通信安全,其核心机制依赖于证书信任链。在Android系统中,自7.0版本起,谷歌收紧了证书信任策略,默认仅信任系统预置的CA证书,这直接导致了传统抓包方法失效。理解这一原理对于移动开发、测试及安全研究至关重要,它揭示了应用层安全策略与系统底层机制的关联。通过将用户证书安装至系统信任区,可以突破此限制,实现HTTPS流量的解密与分析。这一技术在App调试、接口测试、安全审计等场景中具有广泛的应用价值。本文以雷电模拟器9.0和Charles抓包工具为例,详细演示了如

weixin_42521843的博客 279

强软弱虚thread local

read阻塞一下(防止main结束) 设置堆最多20m(20-10=10 10<15 软引用会被干掉)适合做缓存 弱引用是为了解决某些地方的内存泄露问题(thread local中) 管理堆外内存() 当某个对象被回收我能最多他被回收 thread local(线程同步) 2线程访问同一对象 2 源码 当前线程对象(t1 和 t2 的map都是自身对象的属性) @Transcation 内存泄露 ...

jsxllht的博客 149

SAP ERP与金蝶云星空的集成案例(新能源光伏行业)

通过建设PLM、SAP、MES、WMS、SCADA、EAM等多系统集成的工业互联网平台作为数字化工厂的控制中枢,不仅可以实现人员、设备、物料、工艺参数、产品等生产全流程追溯管理,同时也可以根据数据采集进行生产现场的控制调节,最大程度降低能耗水平。销售订单创建下推金蝶采购订单创建修改、销售订单创建下推金蝶销售订单创建修改、销售发货过账下推金蝶采购入库单、销售发货过账下推金蝶销售出库单:在SAP ERP系统创建销售订单、销售发货过账单后推送到云星空系统,进行采购/销售订单的创建修改、完成物料的入库和出库流程。

集信通 1615

【PX4学习笔记】1. ROS及PX4环境搭建

环境 Ubuntu18.04 安装教程参考 https://www.guyuehome.com/8983 安装过程中问题的解决 问题1 rosdep init 错误的终极解决方法 注意etc/下的ros和rostep文件夹要自己建 问题2 Ubuntu安装ROS报错 sudo: rosdep:找不到命令 问题3(更好地解决了问题1、2)【推荐】 解决GitHub的raw.githubusercontent.com无法连接问题 问题4:GeographicLib的安装 教程中安装GeographicLib d

【人工智障 | 计算鸡视觉 | 机器孩】 8229

ThreadLocal和强软弱虚引用

ThreadLocal源码 使用场景:声明式事务,保证拿到同一个connection 内存泄漏

一切皆有可能! 1124

滤波电路Multisim电路仿真实验汇总——硬件工程师笔记

本文系统介绍了滤波电路的基础知识及其应用。首先按频率选择性和实现方式对滤波电路进行分类,详细阐述了低通、高通、带通、带阻滤波器以及无源、有源滤波器的特点。接着重点分析了桥式整流电容滤波、电感滤波、LC滤波和CRπ型滤波四种典型电路的工作原理、应用场景及设计要点。通过理论公式和实际案例,指导如何选择滤波元件参数,考虑寄生效应,并通过仿真验证设计效果。最后提供了硬件工程师笔试面试相关的技术资源链接,包括器件知识、电路仿真及企业真题解析等内容。本文可作为电子电路设计领域工程技术人员的学习参考资料。

XU157303764的博客 2165

强软弱虚引用以及threadlocal

又是一个被讲烂的东西,但是我还是总结一下,日后也可以自己看。 一、强引用 A a = new A(); a是强引用,new A();是对象。我们99%都是用这样形式,不多说,不举例。 二、软引用 软引用是说当内存不足时,也就是快oom之前,它会去把只有软引用引用的对象删除。例子如下: 结果如下: 三、弱引用 弱引用是说当第一次GC时候,删除只有弱引用引用的对象。例子如下: ...

qq1805696978的博客 665

Python爬虫实战:用Playwright+Transformer做财经新闻事件驱动分析,我靠它抓住了算力政策的涨停机会

对我来说,这套系统最大的价值不是抓住了几次涨停,而是把“看新闻→分析→决策”的全流程自动化、量化了——不用再被股吧的情绪带偏,不用再熬夜刷新闻,而是用数据和模型做理性判断。更重要的是,搭建这套系统的过程,我吃透了Playwright动态爬虫、Transformer文本分析、量化数据对接这些核心技能,这些技能不管是做量化、做数据分析师,还是做其他领域的爬虫,都能用得上。现在打开PyCharm,跟着代码跑一遍,你也能从海量财经新闻里,挖出属于自己的事件驱动信号——与其靠感觉炒股,不如靠数据说话。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1391

C#上位机之海康相机开发(SDK)实战教程

SDK的接口设计遵循“句柄-操作-释放”模式,掌握→→→的流程,就能完成基础开发;工业场景需重点关注稳定性:断连重连、内存管理、抗干扰(网口相机的IP设置、触发信号的可靠性);进阶功能(如图像处理、多相机同步)需结合视觉库(EmguCV)和硬件特性(GPIO触发),但前提是保证基础采集的稳定。建议新手先跑通SDK自带的C#示例,理解每个函数的作用,再逐步替换为自己的代码。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 2191

ThreadLocal 强软弱虚

/ Thread 类中的成员变量// 每个线程独有// ThreadLocalMap 类(ThreadLocal的内部类)// Entry 数组:哈希表的核心// Entry 类:Key是ThreadLocal的弱引用,Value是强引用>> {// 业务数据(强引用)super(k);// 调用WeakReference的构造方法,将k作为弱引用存储value = v;// Value是强引用// ThreadLocal的set方法(简化版)if (map!= null) {

AlbenXie的博客 1054

基于深度学习的异常检测实战:从自编码器到GAN

本文通过一个完整的实战案例,展示了如何使用自编码器和GAN进行异常检测。我们详细介绍了数据准备、模型定义、训练和评估的步骤,并提供了可运行的代码。希望本文能为读者在实际项目中应用异常检测技术提供实用的指导和启发。

Programming Talk 242

ThreadLocal以及强软弱虚

threadLocal与强软弱虚

qq_40223516的博客 214

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【并发编程&JVM】--- 强软弱虚四种引用 + ThreadLocal内存泄漏原因分析

文章目录【1】强软弱虚四种引用【1.1】强引用【1.2】软引用【1.3】弱引用【1.4】虚引用【2】ThreadLocal内存泄漏问题分析 本篇文章整理自马士兵老师的公开课(哔哩哔哩) 【1】强软弱虚四种引用 【1.1】强引用 平时new出来的对象,只要有引用在即使发生GC也回收不了 【1.2】软引用 【1.3】弱引用 【1.4】虚引用 【2】ThreadLocal内存泄漏问题分析...

nrsc 1176

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

ThreadLocal及强软弱虚引用

1.threadLocal static ThreadLocal<Person> tl = new ThreadLocal(); 上述threadLocal在创建的时候是在各自的线程中创建一个person对象 疑问:为什么tl.get()获取不到person呢? 用途: 声明式事务的时候,有多个数据库连接,我们将多次连接操作表示一个事务,那么我们怎么获得每个会话的同一个连接呢,那么连接放到threadlocal中,下次不在从连接池中取,而是从threadLocal中取 拦截器中将当前登录用

qq_43583755的博客 550

多线程与高并发四:VarHandle与强软弱虚引用和ThreadLocal

一:VarHandle 上一篇说了AQS的源码,其中还有一个知识点VarHandle,看下面的代码 大家会问:VarHandle是什么?有什么作用? 其实:VarHandle是jdk1.9之后才出现的,表示指向某个变量的引用,可以完成原子性的线程安全操作可以通过cas方式进行比较设值。比反射快,直接操纵二进制码,反射每次操作前都要做检查 二:强软弱虚引用 博客部分内容引用:http://blog.youkuaiyun.com/liuxian13183 强引用 Object object=new Object();

qq_40230026的博客 1208

强软弱虚引用 ThreadLocal

强引用 A a = new A();就是强引用 可以重写finalize来测试,当没有引用指向这个对象时,就会被回收 软引用 一个对象,如果是软引用指向它,那只有在内存不够用的情况下,才会回收它,内存够的情况下不会回收 设置jvm参数 -Xms20M -Xmx20M配合SoftReference来测试,堆内存不够了才会回收 软引用主要用作缓存 弱引用 只要遭遇到GC垃圾回收就会被回收 如果有一个强引用和一个弱引用同时指向一个对象,只要强引用消失,这个对象就会被回收 可以防止内存泄漏,一般用在容器中

WindNolose的博客 205

强软弱虚引用与ThreadLocal

ThreadLocal OOM OOM,全称“Out Of Memory”,翻译成中文就是“内存用完了”,来源于java.lang.OutOfMemoryError。看下关于的官方说明: Thrown when the Java Virtual Machine cannot allocate an object because it is out of memory, and no more memory could be made available by the garbage collector.

lickdog的博客 244

java强软弱虚四种引用,ThreadLocal说明

强引用 当对象不再被引用时才会被GC回收 软引用 当内存空间被占满自动被回收 弱引用 引用值可以获取,JVM发生GC即被回收 虚引用 引用值无法获取,JVM发生GC即被回收,回收引用会被队列检测 直接看案例,先写个main方法 public class ReferenceMain { int a = 0; public ReferenceMain(int a){ this.a = a; } public ReferenceMain(){ }

sinat_27039989的博客 311

ThreadLocal全解析以及Java的强软弱虚引用

ThreadLocal全解析 最近在面试一家还算二三线的略知名厂时,被问到了ThreadLocal,虽然大致的使用方式是回答出来了,但面试官问到使用ThreadLocal需要注意什么,以及它为什么会导致内存泄漏的问题时,就一脸懵逼了。 所以写篇文章记录一下。 ThreadLocal本身并不复杂,但面试一旦被问到,拖个5-10分钟还是没问题的,感觉也算是一个有“性价比”的知识点。 Java的四种引用(强软弱虚) 首先需要一点前置知识,Java中实际上有4种引用。 强引用 在之前的学习中了解到gc会收集那些没

qq_34548229的博客 608

Java 完全理解强软弱虚和ThreadLocal

什么是强软弱虚? 强引用就是普通的new出来的对象,当没有引用再指向它时,它才会被GC回收,否则哪怕内存溢出也不会被GC回收,当然如果将引用重新赋值为null,则该引用对象就不再是强引用了 软引用是当将要发生内存溢出前,就会被GC回收,通常适合用来做网页或图片等资源的内存中的缓存,这样既使得图片这种占用内存比较多的资源可以更快的被回收,又降低了重新从磁盘或者网络加载这些资源的频率。 弱引用是每次GC都会被回收,ThreadLocal底层就是使用了弱引用 虚引用是在对象即将被回收前将其放入一个虚引用队列中,然

panqipeng3的博客 238

多线程与高并发之(五)AQS源码约阅读与强软弱虚4种引用以及ThreadLocal原理与源码

AQS源码约阅读与强软弱虚4种引用以及ThreadLocal原理与源码AQS源码分析二级目录三级目录 AQS源码分析 AQS核心是什么,就是一个state,这个代表的意思由其子类决定,我们先来讲一下ReentranLock,刚才state为0,当你获得锁之后,它就变成了1,释放的时候变成0,这个state值得基础之上,它的下面还带有一个队列,是AQS自己内部所维护的队列,队列所维护的是一个node节点,node节点是AQS的内部类,最重要的是,它保留了一个Thread一个线程,所以这个队列是线程队列,而且还

weixin_42324034的博客 287

强软弱虚引用以及 ThreadLocal 的原理和内存泄露问题

四大引用 强引用 特点:只有对象没有被引用的时候,才会被回收。 示例:Object o =new Object(); 软引用 特点:内存不够的时候,软引用就会被GC掉 实例:SoftReference<Object> o1 = new SoftReference<>(new Object()); 使用场景:缓存 弱引用 特点:系统只要GC,就会被回收掉 实例:WeakReference<Object> o2 = new WeakReference<>(n

凉快 1084

AQS源码核心、ThreadLocal以及强软弱虚引用

1.LockSupport 2.AQS源码

小白码农的博客 357

JAVA多线程与高并发(五)[ThreadLocal,强软弱虚引用]

link-JAVA多线程与高并发系列[前言,大纲,目录] ThreadLocal 假设有一个静态变量,线程使用它的过程中可能会做一些修改,但是这些修改只想在这个线程内部生效,不想影响其他线程,那么就应该用ThreadLocal. 举个栗子 public class ThreadLocal2 { // 创建一个ThreadLocal变量 static ThreadLocal<Person&...

书院二层楼 692

多线程与高并发6-ThreadLocal+强软弱虚

ThreadLocal 线程本地变量。线程拥有该线程独有的变量。 set()。 实际上是存储到的是(Thread.currentThread().map(ThreadLocal,data)) 当前线程的一个map中。所以只有当前线程可以获取,并且线程间相互隔离 ThredLocalMap存储的是ThreadLocal,ThreadLocalMap的key是一个弱引用(gc自动清除),用于防止内存泄...

Raymond的博客 223
上一篇: 微服务SpringCloud开弓之Ribbon负载均衡调用《六》
下一篇: mysql基础再战《一》
漂吧
博客等级 码龄8年 15粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值