TypechoJoeTheme

至尊技术网

统计
登录
用户名
密码
搜索到 3 篇与 的结果
2025-09-04

环形引用检测与弱引用机制:破解内存泄漏的利器

环形引用检测与弱引用机制:破解内存泄漏的利器
一、什么是环形引用?当对象A持有对象B的引用,同时对象B又反向引用对象A时,就形成了最简单的环形引用链。在采用引用计数(Reference Counting)机制的语言中(如Python、Objective-C),这类相互引用会导致引用计数永远无法归零,从而引发内存泄漏。python class Node: def init(self): self.parent = None self.children = []形成环形引用root = Node() child = Node() child.parent = root # 引用计数+1 root.children.append(child) # 引用计数再+1二、弱引用如何破解循环?2.1 强引用与弱引用的本质区别 强引用:增加目标对象引用计数,阻止被回收 弱引用:不增加引用计数,通过中间层间接访问 python import weakrefclass Graph: def init(self): self.nodes = [] self._ed...
2025年09月04日
23 阅读
0 评论
2025-07-29

JavaScript的WeakSet:弱引用集合的深度解析

JavaScript的WeakSet:弱引用集合的深度解析
一、什么是WeakSet?WeakSet是ES6引入的一种特殊集合类型,与常规Set不同,它专门用于存储对象引用且持有的是弱引用。这意味着当对象没有被其他强引用时,会被垃圾回收机制自动回收,即使它仍存在于WeakSet中。javascript const weakSet = new WeakSet(); let obj = { id: 1 }; weakSet.add(obj); console.log(weakSet.has(obj)); // trueobj = null; // 取消强引用 // 垃圾回收后weakSet自动清除该对象二、WeakSet的核心特性 仅存储对象类型试图添加原始值(如字符串、数字)会直接抛出TypeError: javascript new WeakSet().add(1); // TypeError: Invalid value used in weak set 不可迭代没有size属性,也不支持forEach()、keys()等方法,这是因其弱引用特性决定的。 自动内存回收当对象外部引用消失时,WeakSet不会阻止垃圾回收: javascr...
2025年07月29日
34 阅读
0 评论
2025-07-26

ThreadLocal内存泄漏问题分析与解决方案

ThreadLocal内存泄漏问题分析与解决方案
一、ThreadLocal的内存泄漏之谜在Java面试中,ThreadLocal的内存泄漏问题就像一道必考题。但很多开发者只知其然不知其所以然。上周团队代码评审时,我发现一个典型用例:java public class UserContextHolder { private static final ThreadLocal context = new ThreadLocal<>();public static void set(User user) { context.set(user); } public static User get() { return context.get(); } }表面看这段代码很完美,但在高并发场景下却可能成为内存泄漏的定时炸弹。问题的本质在于ThreadLocal的底层实现机制。二、泄漏根源深度剖析1. 数据结构关系每个Thread对象内部都维护着ThreadLocalMap,这个特殊Map的: - Key是弱引用的ThreadLocal实例 - Value是强引用的存储对象mermaid graph LR ...
2025年07月26日
41 阅读
0 评论