首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在WeakReference.Target的GC之后,WeakReference会发生什么

在WeakReference.Target被GC之后,WeakReference本身并不会发生什么变化。但是,由于WeakReference所指向的对象已经被GC回收,因此该对象的所有弱引用(包括WeakReference)都将自动失效并被回收。这意味着,如果WeakReference所指向的对象在GC之后还有效,那么WeakReference将不再有效,并且无法再访问该对象。

此外,需要注意的是,由于GC在回收WeakReference所指向的对象时,该对象可能已经被修改,因此再次访问该对象可能会产生意外的结果。因此,在WeakReference.Target被GC之后,使用WeakReference访问该对象可能会导致意外的结果。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

System.gc 之后到底发生什么

关于 System.gc ,网上说法众多,其中大部分认为 —— “System.gc 只是给 JVM 一个暗示或者是提示,但是具体 GC 会不会发生,以及什么时候发生都是不可预期”。...这个说法以及 Java 标准库中关于 System.gc 注释都是非常模糊,那么 System.gc 被调用之后具体会发生什么行为,我想还是应该到具体 JVM 实现中去一探究竟,毕竟源码面前了无秘密...System.gc 线程触发 Concurrent Full GC 之后就立即返回了,不需要等到 GC 结束。...JNI 进入到 Native 方法实现之后,由于 Native 代码不会访问 Java 对象、不会调用 Java 方法,不再执行任何字节码指令,所以 Java 虚拟机堆栈不会发生改变,因此 Native...而且调用 System.gc Java 业务线程触发 Concurrent Full GC 之后就返回了,不需要等到 GC 执行完毕。

12310

ReactDOM.renderreact中执行之后发生什么

ReactDOM.render通常是如下图使用,提供 container 里渲染一个 React 元素,并返回对该组件引用(或者针对无状态组件返回 null)。...this.elementType = null; // 异步组件lazy component resolved之后返回内容,一般是`function`或者`class`组件 this.type...节点树中‘parent’,用来处理完这个节点之后向上返回 this.return = null; // 指向第一个子节点 this.child = null; // 指向自己兄弟节点,兄弟节点...= NoWork; // Fiber树更新过程中,每个FIber都会有一个跟其对应Fiber // 我们称他为`current workInProgress` // 渲染完成后他们交换位置...initializeUpdateQueue(fiber: Fiber): void { const queue: UpdateQueue = { // 每次操作完更新阿之后

70120
  • ReactDOM.renderreact源码中执行之后发生什么

    ReactDOM.render通常是如下图使用,提供 container 里渲染一个 React 元素,并返回对该组件引用(或者针对无状态组件返回 null)。...this.elementType = null; // 异步组件lazy component resolved之后返回内容,一般是`function`或者`class`组件 this.type...节点树中‘parent’,用来处理完这个节点之后向上返回 this.return = null; // 指向第一个子节点 this.child = null; // 指向自己兄弟节点,兄弟节点...= NoWork; // Fiber树更新过程中,每个FIber都会有一个跟其对应Fiber // 我们称他为`current workInProgress` // 渲染完成后他们交换位置...initializeUpdateQueue(fiber: Fiber): void { const queue: UpdateQueue = { // 每次操作完更新阿之后

    55630

    ReactDOM.renderreact源码中执行之后发生什么

    ReactDOM.render通常是如下图使用,提供 container 里渲染一个 React 元素,并返回对该组件引用(或者针对无状态组件返回 null)。...this.elementType = null; // 异步组件lazy component resolved之后返回内容,一般是`function`或者`class`组件 this.type...节点树中‘parent’,用来处理完这个节点之后向上返回 this.return = null; // 指向第一个子节点 this.child = null; // 指向自己兄弟节点,兄弟节点...= NoWork; // Fiber树更新过程中,每个FIber都会有一个跟其对应Fiber // 我们称他为`current workInProgress` // 渲染完成后他们交换位置...initializeUpdateQueue(fiber: Fiber): void { const queue: UpdateQueue = { // 每次操作完更新阿之后

    56140

    浏览器输入URL回车之后发生什么?(超详细版)

    浏览器缓存 浏览器先检查是否缓存中,没有则调用系统库函数进行查询。 2....什么是 DNS 劫持 前端 dns-prefetch 优化 三、TCP 连接 TCP/IP 分为四层,发送数据时,每层都要对数据进行封装: 1....否则服务器按照规则把请求重写到 一个 REST 风格 URL 上。 然后根据动态语言脚本,来决定调用什么类型动态文件解释器来处理这个请求。...CSS 匹配规则 匹配一个节点对应 CSS 规则时,是按照从右到左顺序,例如:div p { font-size :14px }先寻找所有的p标签然后判断它父元素是否为div。...微任务 微任务是ES6和Node环境下,主要 API 有:Promise,process.nextTick。 微任务执行在宏任务同步任务之后异步任务之前。

    69320

    浏览器输入URL回车之后发生什么?(超详细版)

    浏览器缓存 浏览器先检查是否缓存中,没有则调用系统库函数进行查询。 2....什么是 DNS 劫持 前端 dns-prefetch 优化 三、TCP 连接 TCP/IP 分为四层,发送数据时,每层都要对数据进行封装: ? 1....否则服务器按照规则把请求重写到 一个 REST 风格 URL 上。 然后根据动态语言脚本,来决定调用什么类型动态文件解释器来处理这个请求。...CSS 匹配规则 匹配一个节点对应 CSS 规则时,是按照从右到左顺序,例如:div p { font-size :14px }先寻找所有的p标签然后判断它父元素是否为div。...微任务 微任务是ES6和Node环境下,主要 API 有:Promise,process.nextTick。 微任务执行在宏任务同步任务之后异步任务之前。 ?

    66640

    你知道 cmd 输入 ping 之后发生什么吗? —— 详解 ICMP 协议

    解释之前我们先来了解一下 ICMP 报文。 ICMP 报文 ? ❔ 为什么要引入 ICMP 协议 ?...接着 4 个字节内容与 ICMP 类型有关。...下面我们来看一下它什么时候不需要发送: 1️⃣ 对 ICMP 差错报告报文不再发送 ICMP 差错报告报文。 2️⃣ 对第一个分片数据报片所有后续数据报片都不发送 ICMP 差错报告报文。...再来看一个Traceroute 应用举例: 1️⃣ Windows 操作系统中这个命令是 tracert。 2️⃣ 用来跟踪一个分组从源点到终点路径。...cksum += Convert.ToInt32( buffer[counter] ); counter += 1; size -= 1; } /* 若ICMP报头为奇数个字节,剩下最后一字节

    72030

    面试环节:浏览器输入 URL 回车之后发生什么?(超详细版)

    浏览器缓存 浏览器先检查是否缓存中,没有则调用系统库函数进行查询。 2....什么是 DNS 劫持 前端 dns-prefetch 优化 三、TCP 连接 TCP/IP 分为四层,发送数据时,每层都要对数据进行封装: 1....否则服务器按照规则把请求重写到 一个 REST 风格 URL 上。 然后根据动态语言脚本,来决定调用什么类型动态文件解释器来处理这个请求。...CSS 匹配规则 匹配一个节点对应 CSS 规则时,是按照从右到左顺序,例如:div p { font-size :14px }先寻找所有的p标签然后判断它父元素是否为div。...微任务 微任务是ES6和Node环境下,主要 API 有:Promise,process.nextTick。 微任务执行在宏任务同步任务之后异步任务之前。

    60930

    ReactDOM.renderreact源码中执行之后发生什么?_2023-02-19

    ReactDOM.render通常是如下图使用,提供 container 里渲染一个 React 元素,并返回对该组件引用(或者针对无状态组件返回 null)。...this.elementType = null; // 异步组件lazy component resolved之后返回内容,一般是`function`或者`class`组件 this.type...节点树中‘parent’,用来处理完这个节点之后向上返回 this.return = null; // 指向第一个子节点 this.child = null; // 指向自己兄弟节点,兄弟节点...= NoWork; // Fiber树更新过程中,每个FIber都会有一个跟其对应Fiber // 我们称他为`current workInProgress` // 渲染完成后他们交换位置...initializeUpdateQueue(fiber: Fiber): void { const queue: UpdateQueue = { // 每次操作完更新阿之后

    50910

    当你浏览器中输入Google.com并且按下回车之后发生什么

    这个系统扫描每个键状态,对于按键开关电位弹跳变化进行噪音消除(debounce),并将其转化为键盘码值。在这里,回车码值是13。键盘控制器得到码值之后,将其编码,用于之后传输。...之后它又去调用 Win32K.sys ,在这之前有可能把消息传递给安装第三方键盘过滤器。这些都是发生在内核模式。...然而,就是这第一个HTTP请求,却可能会使用户收到 downgrade attack 威胁,这也是为什么现代浏览器都预置了HSTS列表。...解析完HTML之后,浏览器和客户端重复上面的过程,直到HTML页面引入所有资源(图片,CSS,favicon.ico等等)全部都获取完毕,区别只是头部 GET / HTTP/1.1 变成 GET...此时浏览器把文档标记为“可交互”,浏览器开始解析处于“推迟”模式脚本,也就是那些需要在文档解析完毕之后再执行脚本。之后文档状态变为“完成”,浏览器进行“加载”事件。

    1.3K130

    【八股文Java】: Java对象hashCode()值是可变吗?发生GC之后会变吗?为什么?hashCode值如何生成?

    问:Java对象hashCode()值是可变吗?发生GC之后会变吗?为什么?hashCode值如何生成? 答:Java对象hashCode()默认实现是不可变,即使GC之后也不会变。...因为: 1、如果Java对象hashCode()方法重写即自定义hashCode值实现,参与hash计算变量一旦被赋值后就不能再改变,hash值与map容器相关,一旦改变,map取值:可能发生业务异常...2、默认Java对象hashCode()方式实现是native级别的,即JVM层实现,生成hashCode值后会保存到对象对象头MarkWord中,即缓存在对象头MarkWord中,不会重复计算。...---- 附: 默认Java对象hashCode()方式实现跟踪源码(openjdk源码 版本jdk-jdk-21-ga): 1、寻找注册hashCodenative方法: (src/hotspot...: 上述找到ObjectSynchronizer::FastHashCode方法实现部分代码: HashCode生成方法: 可以看到HashCode生成有好几种策略,此openjdk默认策略时最后一种

    77530

    美国硅谷银行倒闭之后产生什么影响

    尤其是在当前金融环境下,银行倒闭所带来影响将更加严重,需要政府和相关机构采取措施,加强对银行业监管,避免类似事件再次发生,保护投资者和金融市场稳定 这件事情对 crypto 领域有什么影响 硅谷银行倒闭对加密货币领域影响可能相对较小...金融市场动荡情况下,投资者可能开始撤出资金,导致加密货币市场价格下跌。...五、加密货币市场机会 虽然银行倒闭可能导致金融市场不稳定,但它也可能创造出加密货币市场机会。金融市场动荡情况下,投资者可能开始寻找更加安全和稳定资产,进而转向加密货币。...金融市场动荡情况下,投资者可能开始撤出资金,导致加密货币市场价格下跌。...五、加密货币市场机会 虽然银行倒闭可能导致金融市场不稳定,但它也可能创造出加密货币市场机会。金融市场动荡情况下,投资者可能开始寻找更加安全和稳定资产,进而转向加密货币。

    1.3K240

    什么G1 GC从JDK 9之后成为默认垃圾回收器?

    很可能在完成一个新生代回收之后,一个新生代分区未来某个时刻被用于老生代分区。同样地,一个老生代分区完成回收之后,它就成为待使用分区,未来某个时候作为一个新生代分区来使用。...与其他JVM垃圾回收器一样,一旦发生一次新生代回收,整个新生代都会被回收。这也就是我们常说新生代回收(Young GC,简称为YGC)。...实际上混合回收初始标记是借用了新生代回收结果,即新生代垃圾回收后新生代Survivor分区作为根,所以混合回收一定发生在新生代回收之后,且不需要再进行一次初始标记。这就是所谓“借道”。...;如果分区还有任何活跃对象都不会释放,真正释放是Mixed GC中; 并发标记阶段完成之后,在下一次进行垃圾回收时候就会把垃圾比较多老生代分区进行回收。...注意,在上图并发标记阶段中还可以发生YGC(可以是一次YGC,也可以是多次YGC);另外在图中混合回收也可能发生多次,因为G1对停顿时间有要求,G1预测停顿时间决定一次回收老生代分区数目,所以可能需要多次混合回收才能完成并发标记阶段识别的垃圾比较多老生代分区

    5.5K20

    WCF后续之旅(10): 通过WCF Extension实现以对象池方式创建Service Instance

    由于我们通过weak reference来实现对象池,weak reference引用service instance是可以被GC回收,这样做好处是充分利用GC垃圾回收功能,避免不需要service...= weakReference.Target as IPooledObject; 33: if (serviceInstance !...本例中为了简便,我直接对service type对象进行枷锁,由于本例比较简单,不会引起什么问题。...由于我们将DoSomething方法执行延长至2s,在这种情况下,由于client端service掉用间隔是1s,所有当第二次service调用抵达之后,第一次创建service instance...上面的运行结果都是GC没有进行垃圾回收情况下运行结果,如何GC参与了又会有怎样行为表现呢?

    71690

    当妈妈淘宝购物时候,都发生什么?(下篇)

    在上一篇文章中,讲到了你妈妈成功从你手中夺得了电脑控制权,然后打开了淘宝网并且在网站首页搜索框中搜索了“美丽裙子”,之后用一种挑剔眼光盯着电脑屏幕一个多小时,就为找到一条心爱裙子。...浏览各种裙子过程中发生什么呢?最终决定购买一条裙子时候又发生什么?且听张叔叔慢慢道来。 ?...这个时候即使你家断网了,你家断电了,你家电脑突然死机了,只要你妈妈重新打开淘宝,都可以看到自己碎花裙子购物车里面放着。为什么呢?...然后去银行系统上进行扣款操作,这个地方就是淘宝服务器和银行服务器之间交互了,它们之前已经协商好如何扣款等操作。银行服务器收到扣款消息后,认认真真核对相关信息之后就从你爸爸银行卡里面把钱扣掉了。...当妈妈购物时候,都发生什么?现在是不是比较清楚了。

    66540

    当妈妈淘宝购物时候,都发生什么?(上篇)

    网络购物已经成为了一种生活习惯,而每个家庭里面最爱网络购物应该是你妈妈或者你姐姐吧。当他们通过电脑或者手机访问淘宝时候,到底中间发生什么事情呢?...今天张叔叔就给大家介绍一下,当妈妈淘宝购物时候,究竟发生什么淘宝买东西通常有两种方式,通过电脑中浏览器登录淘宝网站购买东西,或者通过手机上面的淘宝APP来购买。...这个就很有意思了,当你家电脑连上网络之后向所有周围小伙伴们吼一嗓子“我连上网了哈,以后大家都是好伙伴”,这个时候有个叫DHCP家伙会给计算机分配一个该网络内唯一IP地址,各种交互过程中,你家电脑就知道了...当你家浏览器接收到返回内容之后,解析返回结果,最终浏览器上面展现出了淘宝网首页。这个时候距离你妈妈浏览器输入网址不到1秒钟。...后面随着叔叔介绍,更加深入介绍整个流程中每一个细节。 你妈妈浏览了几百条裙子,这个过程中发生什么呢? 最终当你妈妈挑好自己心仪裙子并放到购物车、下订单购买过程中发生什么呢?

    78410

    笔记13 - Android中内存泄漏如何优化

    如何检测内存泄漏 Java中WeakReference是弱引用类型,每次GC时候,弱引用持有的对象如果没有被强引用持有,那么GC回收它所持有的对象: ?...上述代码中构建了一个BigObject对象,但这个对象并没有被强引用持有,System.gc()之后,该对象就会被回收。...运行代码之后,可以看到,触发GC之后BigObject被成功回收,而且一个WeakReference对象也被放入到了ReferenceQueue中。...主动触发GCGC之后遍历ReferenceQueue中所有记录,将ReferenceQueue中有记录Reference从Set中删除 我们之后系统GC之后,没有被强引用持有的弱引用对象会被回收...我们知道Activity启动之后会通过Looper.loop()阻塞读取消息,当LooperMessageQueue中没有消息时候,线程处于阻塞休眠状态,我们如何知道主线程Looper中没有消息可处理了呢

    1.4K10
    领券