自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(100)
  • 收藏
  • 关注

原创 有哪些值得阅读学习、代码优雅的小型 Rust 项目?

compose!是一个 Rust 宏,它让你能够将多个函数“串联”在一起,其中一个函数的输出会作为下一个函数的输入。想象一下,compose!就像是给你的函数链条装上了齿轮,帮助它们顺利地传递和转换数据。// 输出:48在这个例子里,h、g 和 k 都是函数,compose!宏把它们组合成一个新的函数,按顺序处理输入。

2025-01-24 17:00:00 752

原创 为什么现在很多js库都不提供js文件来直接引入,而是通过npm安装的形式?

如果你就是想写个简单的页面,完全可以继续用传统方式。但如果你想往前端开发这条路走下去,npm这个坎,迟早要过。就像我朋友说的:"不会npm的前端,就像不会开车的司机,虽然你可以一直坐地铁...但你确定要这样过一辈子?对了,如果有人问你为什么要用npm,你就把这篇文章甩给他(手动狗头)

2025-01-24 13:45:00 675

原创 在大模型训练领域会不会出现类似Hadoop的架构,用大量低成本消费级的显卡训练超大模型?

其实这个问题让我想起了一句话: "便宜没好货,好货不便宜" 但在技术圈还要加一句: "除非你能发明出一个更好的方案"这可能就是为什么大家都在卷自研芯片吧...我是旷野,探索无尽技术!(顺便说一句,要是谁真研究出了用消费级显卡训练大模型的方案,怕是要直接起飞...)

2025-01-23 12:00:00 240

原创 感觉 Transformer注意力机制的原理很丑很暴力,没有人脑神经网络优雅?

人脑是自然界精打细算的幸存者,Transformer是人类算力过剩的暴力美学——就像原始人钻木取火VS现代人按下打火机,没有高低贵贱,只有适者生存。反观人脑,光是区分猫和狗就消耗了海马体+视觉皮层+前额叶的联合算力,而。是台24小时满功率运转的分子料理机,而人脑可是修炼了五百万年的佛系扫地僧啊!这锅「矩阵乘法麻辣烫」看似简单粗暴,实则暗藏玄机——它用。」(在嘈杂环境里瞬间锁定目标声音的超能力)。Transformer的「丑」恰恰是。:把玄学的「注意力」变成可量化的。Transformer用的是。

2025-01-23 10:15:00 338

原创 为什么Mac电脑在很多领域没有存在感?

Mac就像咖啡店端着Flat White的文艺青年,而现实世界的数字战场需要的是——能泡面、能挖矿、能装360全家桶的「网吧战神」,根本格格不入好吧。:当Windows电脑在菜市场砍价时,Mac正在美术馆给USB-C接口拍概念大片。:没有MacBook的咖啡店就像没有灯牌的网红景点。你以为苹果不想统治世界?+终端+zsh配置完成度堪比修仙者渡劫,但在某些平行宇宙,Mac正在。它缺失的不是存在感,而是。就像看原始人钻木取火,

2025-01-22 22:23:15 430

原创 Rust 和 C++、Go 相比,有哪些优雅之处?

或许真正的工程师之道,就是在安全与自由之间,找到那个能让自己凌晨三点debug时不砸键盘的微妙平衡点。地狱——那一刻,仿佛从自动驾驶的特斯拉跳进了手动挡老爷车,既怀念智能导航,又沉迷机械操控的原始快感。),如同编程界的无印良品——没有C++大而全的压迫感,却能用#[derive(Serialize)]这种声明式魔法,三行代码搞定JSON转换。就像武侠小说的藏经阁——随便翻开一本《Boost.Spirit》,都能看到前辈们在模板元编程中刻下的“剑气痕迹”。——这在C++界堪比连续100天早睡的神迹。

2025-01-22 22:22:14 1326 1

原创 Arm 控股、微软、英伟达、甲骨文、OpenAI 将是美国初始的科技合伙人,这背后的原因有哪些?

这种分工既避免了单一巨头的技术暴政,又通过利益捆绑形成对华技术封锁的联合阵线(OpenAI白皮书直言项目目标是对抗中国AI崛起11)。凭借与政府合作的合规经验(曾托管TikTok美国数据),甲骨文可提供微软之外的"政治正确云服务"。既要对抗英伟达的GPU垄断(正与博通/台积电合作自研AI芯片7),又要平衡与微软的竞合关系。Stargate项目本质是OpenAI的"算力独立宣言",通过自建数据中心摆脱对第三方云服务的依赖。这场"硅谷复仇者联盟"的背后,是技术主权争夺、产业链卡位与地缘政治博弈的复合产物。

2025-01-22 22:21:43 953

原创 如果我给32位CPU装33条地址总线,它能寻址8G内存吗?

二者可以不同——例如16位的8086有20位地址总线(1MB寻址)。设计特殊的地址合成电路,例如:用两个32位寄存器拼接成64位物理地址(类似8086的段地址+偏移量),增加专用地址扩展寄存器(类似ARM的LPAE)这个问题的答案堪称计算机体系结构课的「薛定谔的猫」——在经典理论中必死无疑,但在量子叠加态下可能生还。:即使克服上述困难,最终得到的也是一个兼容性为负、性能腰斩的「弗兰肯斯坦CPU」,其性价比远低于直接换用64位架构。:地址扩展需从芯片架构阶段开始设计,后期魔改终归是权宜之计。

2025-01-22 22:21:10 459

原创 为什么大家总喊“PHP已死”?真的是死了吗?

我们常常在开发圈子里听到一个总是能听到:“PHP已死”。就像一个神话般流传着,似乎PHP的日子早已过去,迎来了JavaScript、等更“时髦”的语言。然而,真的是这样吗?PHP真的死了吗?答案显然没有那么简单,甚至可以说,它活得比很多人想象的要好。那么,为什么会有那么多人喊“PHP已死”?让我们来从几个角度重新审视一下这个问题。

2025-01-18 18:38:57 1088

原创 如果 非要选一门软件,大佬首先推荐哪个R、SAS、SPSS、Stata、Eviews、Epidata?

只有适合你的工具。基础R、Tidyverse和data.table各自都有其优势,关键在于你所要解决的问题,以及你对性能、可读性和开发效率的权衡。每个人都有自己的偏好,有些人会支持Tidyverse,有些人则认为基础R才是根基,还有一些人认为data.table才是处理大数据的王者。它提供了大量的原生函数,适用于大多数常见任务,但当涉及到更复杂的数据操作时,基础R的代码就显得有些冗长且难以维护。如果你的任务涉及到数百万行数据,或者对性能有极高要求,那么选择data.table无疑是最理想的选择。

2025-01-18 18:37:46 945

原创 未来Linux Kernel 会不会用Rust 重写?

至于整个Linux生态,C和C++的地位依旧非常稳固,但Rust的加入为开发者提供了一个更现代化、更安全的选项,未来可能会看到越来越多的工具和库使用Rust,尤其是在需要高性能的场景中。、gtk-rs,这些库正在帮助开发者创建跨平台的应用,虽然它们还不如Qt或GTK那样普及,但随着时间的推移,Rust可能会在这方面逐渐取代部分传统的工具链,尤其是在那些注重性能和现代化开发模式的场景下。技术的进步就像是在沙滩上建塔,C和C是基石,Rust是新材料,但无论怎么变化,塔的基础始终不会改变。上的优势是不可忽视的。

2025-01-18 18:37:05 949

原创 Rust 与 C/C++:Rust 比 C/C++ 更好还是只是“技能问题”?

对于许多嵌入式系统开发人员而言,的崛起似乎掀起了一股不小的浪潮,特别是在相较于传统的语言,Rust的“内存安全”优势让人眼前一亮。然而,是否可以将Rust作为C/C++的替代品?或者说,Rust是否真的比C/C++更好,抑或它只是一个“技能问题”呢?在嵌入式开发的领域,我观察到,尽管Rust在一些高性能、内存安全敏感的场景中受到了广泛推崇,但它在实际应用中的普及度,特别是在嵌入式领域,依然有限。今天,我会从多个角度探讨这个问题,并且分享一些对于Rust、C/C++以及嵌入式系统开发的个人见解。

2025-01-18 18:36:34 695

原创 Linux是用来干什么的?又可以做哪些事情呢?

他在网上发布代码时说:"这只是个业余作品,可能只能在386/486上运行,永远不会很大很专业..."想想你每天刷的网站、用的APP,它们背后可都是靠Linux在默默干活。从阿里云到亚马逊,从小破站到微博,绝大部分服务器都是Linux在扛着。说实话,第一次接触Linux的时候,我也是一脸懵:"这不就是个黑乎乎的命令行界面吗?你可能不知道,但你身边很多设备都在用Linux:安卓手机(底层是Linux内核)、智能电视、路由器、特斯拉的车载系统。在用Linux,你的安卓手机其实也是个"小Linux"。

2025-01-17 21:45:00 302

原创 为什么Java/Kotlin外的主流语言吹嘘的跨平台不能跨安卓?

首先要澄清一个概念:所谓的"跨平台",其实是有不同层次的。这就像你会说"我是一个全能型选手",但并不意味着你既能当手搓CPU又能荒野求生。所以说,真正的跨平台其实是个权衡的艺术。选择合适的工具,比追求完美的跨平台更重要。iOS的情况比安卓还要严格,这就像是一个更封闭的贵族俱乐部:必须使用Apple认可的开发工具、必须遵循其特定的安全策略、必须经过。--Linux/Windows/macOS的跨平台:这是传统意义上的跨平台。我是旷野,探索无尽技术!--Android/iOS的跨平台:这是移动端的跨平台。

2025-01-17 17:08:49 377

原创 c++相对简洁的项目有用到智能指针

DuckDB类似于SQLite,但目标是提供更强大的分析功能。在这个项目里有智能指针的大量应用,尤其是在内存管理和对象生命周期管理方面。DuckDB的代码结构化石很友好的,非常适合用来学习C++内存管理和智能指针。它使用了很多智能指针,特别是std::shared_ptr和std::unique_ptr,来管理复杂的数据结构。EasyPR是一个C++的开源车牌识别系统,里面包含了很多计算机视觉和图像处理的内容。这里的智能指针被广泛用于管理动态创建的图像数据和模型对象,帮助减少内存管理的复杂性。

2025-01-17 17:08:16 304

原创 从内存布局角度看,cpp的shared_ptr和rust的Arc,哪个更好一些?

shared_ptr就像一个"大院子"住户,不仅要管理自己的房子(对象),还得维护一个"院子公告栏"(控制块)。而Arc则像个"精装修"业主,所有信息都紧凑地塞在一起。

2025-01-17 17:07:35 498

原创 为什么说线性注意力和线性RNN是同质的?

时,一个很重要的原因就在于它的计算效率远远超过传统的自注意力(O(n²))。考虑一下,假如你在看一部1000集的电视剧,是不是每集的细节都要精确记住?虽然它没有全局感受野,但在很多应用场景中,效率往往比精度更重要,特别是处理大规模数据时。本质上,这两者的操作都类似:它们通过“记忆”机制将每一步的信息传递、压缩,最终形成一个。假设你玩的是传话游戏,大家的任务是把信息从第1个人传到第100个人。的并行计算,它像是在看一部电影,能够随意暂停、快进、回放,灵活性极强。,就像你追剧时逐步填充的笔记本一样。

2025-01-17 17:06:59 503

原创 为什么c++有智能指针没有智能引用?

T& ref;// 但这违背了引用的设计初衷!public:// ... 其他操作这不就是披着"引用"外衣的智能指针吗?完全没必要!所以,不是C++不想做智能引用,而是压根儿不需要!

2025-01-15 10:45:00 134

原创 为什么线程切换的开销比系统调用高那么多?

而换选手,也就是线程切换,则需要保存当前选手的状态,把下一位选手拉上场,还得考虑两人是否跑在同一个跑道上,甚至是否用了同一根接力棒(资源)。在用户态和内核态之间切换,它只需要保存用户态的寄存器状态,切换到内核态栈,执行内核代码。切换回用户态,恢复寄存器。而系统调用在切换时通常不涉及这些问题,系统调用发生在同一个线程内,数据的局部性更好,缓存和 TLB 命中率较高。线程切换会触发操作系统的调度器,调度器的作用是从所有线程中挑选下一个要运行的线程。换赛道,也就是系统调用,本质上是同一个线程换了工作场所,从。

2025-01-14 20:25:20 419

原创 在Rust中,str是String的切片,那为什么这种写法是错误的呢?

它非常轻量,适合读取和引用已有字符串内容,适用于函数参数和静态数据。

2025-01-14 20:23:48 1006

原创 为什么 CUDA 已经有了虚拟地址空间管理显存,还需要 PagedAttention 来解决显存碎片问题?

虽然 PagedAttention 显著优化了 Attention 的显存利用,但它仍然是一个“软件层面的解决方案”,并非显存管理的终极手段。虽然虚拟地址空间解决了物理显存碎片化的问题,但它并没有对显存的实际利用率进行精细化控制,也没有考虑到特定任务(如深度学习)对显存的特殊需求。未来,深度学习显存管理的优化方向或许不仅在软件层面,而在硬件与算法的深度融合中找到突破点。虚拟地址让显存看起来是“连续的”,但如果应用程序一次性分配了大块内存,即便只使用了一部分,未使用的部分仍然占用显存。

2025-01-14 20:23:11 1082

原创 为什么我们讨厌 CMake,又为什么无法抛弃它?

结果,它在无数开发者的需求下越加越多的功能,为了兼容性却不得不保留旧的写法,最终变成了今天的“巨型怪物”。它的核心任务是把所有这些“散装复杂性”整合成一个看起来像样的工作流,让开发者尽量只需要配置一套 CMake 脚本,就能在不同系统、编译器和工具链上跑起来。所以,与其一味抱怨 CMake,不如接受它的不足,去理解它的设计初衷,甚至换一种心态——把学会 CMake 看成一种宝贵的技能投资。很多时候,我们抱怨 CMake 难用,其实不是它本身的问题,而是它必须处理的。不熟悉的东西总是让人感到不舒服,更别提。

2025-01-14 20:22:09 1673

原创 为什么 C++ 引入了 char8_t、char16_t 和 char32_t,但用起来这么让人崩溃?

如果你在用 C++ 处理字符串,可能会发现自己掉进了一个巨大的“黑坑”。和:在过去,char 既可以是 ASCII,也可以是 UTF-8,甚至某些平台上的其他编码。现在,char8_t 明确示 UTF-8 字符,char16_t 和 char32_t 分别对应 UTF-16 和 UTF-32。:char8_t 和 char 是不兼容的,这样可以避免无意中将错误编码的数据混用。从上面你可以看到,char8_t 类型的字符串虽然有更明确的语义,但无法直接用标准的 std::cout 输出。

2025-01-14 20:21:10 642

原创 从入门到精通:为什么 Transformer 正在统治自动驾驶江湖?

有人可能会说:“Transformer 的计算资源需求太大了,工业上用得起吗?这是个好问题,但随着硬件的发展,Transformer 的资源劣势正在逐渐消失。硬件优化加速 Transformer 普及GPU/TPU 的友好架构:Transformer 的核心操作(矩阵乘法、自注意力计算)非常适合 GPU 和 TPU,这些硬件的优化正在快速缩小资源消耗的差距。软件工具的支持:像 NVIDIA 的 TensorRT 已经对 Transformer 提供了高度优化的推理加速,进一步降低了其工业部署的门槛。

2025-01-11 22:44:26 717

原创 为什么Rust的热度超过Zig?

你随便说个 Rust 的职业经历,比如开发 Servo 浏览器引擎,都是“985 毕业,头部公司实习”的履历。Zig 在技术上有自己的优势(比如 C 的现代替代品),但在江湖地位上,还属于路边卖艺的阶段。Rust 和 Zig 都是优秀的系统级编程语言,但它们走的是完全不同的路线。Rust 的严格编译检查是一种“长痛不如短痛”的策略,而 Zig 的灵活性虽然降低了学习门槛,但也让一些开发者对其安全性产生顾虑。Rust 就像那个长得帅还多金的天选之子,而 Zig,恐怕只能是那个默默努力的技术宅了。

2025-01-11 22:00:00 1764

原创 为什么 Rust 特别强调宏的功能?

的实现,你会发现它内部其实是帮你调用了 std::fmt 的格式化功能,但作为用户的你完全不用关心这些细节。比如,Rust 的 #[derive] 宏和 #[tokio::main] 宏已经深入到了生态系统的方方面面,成为了 Rust 开发中的“外挂神器”。就像你不用再自己加班996,而是写好宏规则,让你的代码自己加班。宏就像一个守卫,提前帮你打好疫苗,确保你的程序不至于在生产环境中出事。换句话说,Rust 的宏不只是个工具,更像是一个可以自定义的“语言增强包”,随时让 Rust 的功能更上一层楼。

2025-01-11 17:50:25 691

原创 为什么我们讨厌 CMake,又为什么无法抛弃它?

结果,它在无数开发者的需求下越加越多的功能,为了兼容性却不得不保留旧的写法,最终变成了今天的“巨型怪物”。它的核心任务是把所有这些“散装复杂性”整合成一个看起来像样的工作流,让开发者尽量只需要配置一套 CMake 脚本,就能在不同系统、编译器和工具链上跑起来。所以,与其一味抱怨 CMake,不如接受它的不足,去理解它的设计初衷,甚至换一种心态——把学会 CMake 看成一种宝贵的技能投资。很多时候,我们抱怨 CMake 难用,其实不是它本身的问题,而是它必须处理的。不熟悉的东西总是让人感到不舒服,更别提。

2025-01-11 17:49:55 1050

原创 在算法或数据结构里面,都有哪些地方会用到“懒”操作?

聊到"懒"这个话题,想想看,我们人类在偷懒的时候,不都是看哪些事情能拖就拖嘛?计算机世界里的"懒"操作也是这个道理 ——。

2025-01-11 10:00:00 394

原创 如何用通俗易懂的方式解释大模型中的SFT,SFT过程需要大量标记的prompt和response吗?

在SFT中也是类似的道理,与其收集100万条质量一般的数据,不如精心准备10万条优质示例。就像李小龙的名言:"

2025-01-10 23:53:42 429

原创 各种各样的神经网络 architecture 是怎么被发明的?

有人说,AI研究者设计神经网络,就像“科学界的乐高玩家”:你以为他们是灵感爆棚、拍脑袋搞创意,但实际上,人家背后有一套科学方法论,还夹带着点艺术家的浪漫。AI网络的设计其实像一场“进化论”,它不是一夜之间就变得复杂,而是从简单开始,不断试错、优化、调整,逐渐长成现在的样子。:ResNet 的发明不是瞎猜,而是为了“治病救命”,针对梯度消失的痛点,设计了一种简单但有效的跳跃结构。神经网络的设计,既靠科学严谨的分析,又离不开灵感的火花。深度学习本身是受人类大脑启发而来的,很多架构的设计也借鉴了生物学:。

2025-01-10 23:53:11 885

原创 文件“硬连接”是 Linux 操作系统的缺陷吗,为啥跟微软的文件“软连接”,不一致?

Linux同时支持硬链接和软链接,而且各有用处Windows实际上也支持硬链接(mklink /H),只是很多人不知道两种链接各有优劣,就像对象和便利贴,都是生活必需品啊!文件系统里没有缺陷,只有你没发现的优雅设计。题主别被这些概念吓到,慢慢来,操作系统的世界很有趣的。你现在的疑惑,就像是在问"为什么要用身份证,大家互相认识不就好了吗?" 继续学下去,你会发现更多精妙的设计人在Linux一线,随时可以继续交流~ 我是旷野,探索无尽技术!

2025-01-10 10:15:00 406

原创 深度学习数据集有没有规范或指导意见,数据集的建立都需要做哪些研究工作?

建立深度学习数据集不是单纯的“收集数据”工作,而是一门科学与艺术相结合的复杂工程。它需要你既掌握技术细节,也能对目标任务有深刻的理解。数据决定了模型的天花板。模型再强大,数据不行,一切白搭。如果你想让深度学习成功,别只盯着模型优化,先问问你的数据是不是好数据!我是旷野,探索无尽技术!

2025-01-09 23:05:20 1016

原创 rust如何在类中保存一个闭包,它可以捕获类自己?

所以下次当你遇到类似问题时,不妨先问问自己:是不是可以换个角度思考这个问题?也许答案就转角处等着你。在 Rust 中,最优雅的解决方案往往不是强行模仿其他语言的模式,而是遵循 Rust 的独特哲学。在 C++ 中,可以随心所欲地使用引用,编译器不会过多干涉。但在 Rust 中,编译器会像严厉的监管者一样盯着我们的每一个动作,生怕我们搞出什么内存安全问题。Rust 虽然严格,但也提供了解决方案。如果这篇文章对你有帮助,别忘了点个~ 我是旷野,探索无尽技术!如果你问我推荐哪种方案,我会毫不犹豫地选择第三种。

2025-01-09 23:04:41 414

原创 网卡 100G 跑不满?单进程多线程并行才是王道!

明明手里攥着一张 100G 的高性能网卡,但实际跑起来,就像开着法拉利去堵高峰期的四环路——卡得让人绝望。DPDK 是专为高性能网络任务设计的框架,直接绕过 Linux 内核,直接操作网卡硬件,减少上下文切换、内核栈等额外开销。如果你的任务以生成数据为主,而数据发送是次要问题,可以用 TBB 优化生成部分,再用其他网络库完成发送。如果你不需要追求极限性能,又想让代码写起来更优雅,Boost.Asio 是个不错的选择。单进程发满 100G,不是你 CPU 不行,也不是网卡不给力,而是你没用对工具。

2025-01-09 23:04:10 721

原创 SciPy 1.15.0 重磅发布:稀疏数组全面支持、新微分模块上线,Python 3.13 初体验!

如果你是一位 Python 开发者,尤其是深耕数据科学、机器学习、数值计算领域的朋友,那么的发布一定值得你关注!这次的版本更新可谓亮点满满,不仅有重磅的稀疏数组支持,还新增了微分、积分等全新功能模块,同时也迎来了对即将到来的 Python 3.13 的初步支持。接下来,跟我一起来看看这次 SciPy 更新里有哪些值得拍桌叫绝的功能改进吧!

2025-01-05 11:20:57 402

原创 Python之禅:不仅是哲学,更是一种编程艺术

在这里,我想结合几个有趣的视角和实际经验,聊一聊的意义,以及 Python 和其他编程语言相比的独特之处。

2025-01-05 11:20:25 944

原创 微软Office存在的意义是什么?

微软Office家庭版的意义,就是可以总结为一句话:“种下Office的种子,收割你的习惯,家庭是开始,商业才是丰收。它的存在,是微软生态布局的一部分,看似割了厂商韭菜,实际上用最低成本培养了用户对Office的依赖。你用得越久,越离不开它,微软的护城河也就越稳。所以,家庭版不仅有意义,还很“赚钱”——而这一切,只是商业游戏的冰山一角。

2025-01-04 11:26:33 1052

原创 JDBC是如何进行分表数据的聚合的?

先想象一下,你有一家炸鸡店,门口每天排长队。你很开心,但排队的人很烦。于是你开了10家分店,把客人分流到不同店里去吃鸡。这叫分表,也就是把原来装在一个“表”(数据库表)的数据,分到多个表(或多个数据库)里。但问题来了:如果老板(你)想统计每天卖了多少鸡,就得从10家店拿销售数据,再把它们汇总成一个总表。这就是分表数据的聚合。那么,JDBC,作为干活的工具人程序员,用了哪些套路来帮你解决这个问题呢?继续听。“分而治之,聚而合一,小表跑得快,大算交中间件。

2025-01-04 11:14:24 736

原创 程序栈是什么?

原则,最近“压”入栈的函数,最先“弹出”栈。比如你调用函数main -> func1 -> func2,当func2执行完后,会先返回到func1,再返回到main。程序栈分配的内存是连续的,这样设计是为了速度更快。操作系统直接支持栈的分配和回收,用的是硬件级别的指令,几乎没有性能损耗。,用来记录每次函数调用时需要的临时数据,就像是脑袋里的一堆便签条,调用一个函数就写下一张,返回的时候撕掉一张。程序栈的内存是有限的,通常是几MB。程序栈是程序运行时的临时数据存储区域,它的主要职责是管理函数调用的。

2025-01-04 11:02:51 627

原创 Java协程的引入会导致GC Root枚举复杂度大大增加,JVM是如何解决的呢?

Virtual Thread(虚拟线程)是 Java 的最后防线,为了减少内存开销,JVM 不为每个协程分配独立的栈,而是采用。GC(垃圾回收器)的核心任务,是清理掉不再使用的对象,释放内存。问题是,协程的栈帧可能。不过,JVM 团队也给出了解决方案,化繁为简,让这对“矛盾CP”握手言和。的,协程的状态可以被调度器和内存存储管理,这让 GC 很难找到所有相关引用。:协程运行时只使用一个小型栈,当协程挂起时,栈帧被序列化到堆,释放线程资源。传统线程中,线程栈是连续的,GC 只需扫描每个线程的栈帧即可搞定。

2025-01-04 11:02:18 1112

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除