引用计数为何成为现代语言的隐形选择:从性能开销到优化突围
1960年,John McCarthy在MIT实现第一个LISP解释器时,面临一个看似简单却影响深远的问题:如何在程序运行时自动回收不再使用的内存?他给出的答案是tracing garbage collection——周期性地遍历所有可达对象,标记并清理不可达的内存。这个方案统治了函数式语言数十年。 ...
1960年,John McCarthy在MIT实现第一个LISP解释器时,面临一个看似简单却影响深远的问题:如何在程序运行时自动回收不再使用的内存?他给出的答案是tracing garbage collection——周期性地遍历所有可达对象,标记并清理不可达的内存。这个方案统治了函数式语言数十年。 ...
1985年,英特尔发布386处理器时,4KB的页面大小是一个合理的选择。那时候一台电脑的内存不过几兆字节,4KB页面既能保证内存利用率,又不会给页表带来太大压力。四十年过去了,服务器内存已经从兆字节增长到太字节,增长了百万倍,但页面大小依然是4KB。这个遗留设计正在成为高性能系统的隐形瓶颈。 ...
打开任务管理器,你会发现一个令人困惑的现象:某些单页应用(SPA)的标签页在后台运行几小时后,内存占用从最初的 50MB 悄然攀升到 500MB 甚至更多。页面开始卡顿,滚动变得迟滞,最终浏览器可能直接弹出"Aw, Snap!“崩溃页面。 ...
引言 当你在Linux系统中执行top命令时,看到的VIRT和RES两列数字之间往往存在巨大差异。一个简单的Chrome浏览器进程可能显示VIRT为10GB,而RES仅有200MB。这种差异的背后,是操作系统在硬件支持下构建的一套精巧机制——虚拟内存管理。 ...
2023年,加州大学伯克利分校的研究团队发表了一篇论文,揭示了一个令人震惊的数据:现有的大模型推理系统正在浪费60-80%的GPU显存。这些昂贵的计算资源并非用于实际的模型计算,而是被一种看不见的"幽灵"吞噬——内存碎片。 ...
打开任务管理器,你会看到一长串Chrome进程。即使只开了三四个标签页,进程列表里可能已经有十几个"Google Chrome"条目,合计占用超过2GB内存。这个现象让无数用户困惑甚至愤怒:为什么浏览器需要这么多内存? ...
2024年4月,Amazon EKS的一个GitHub issue报告了一个诡异现象:Elixir应用容器频繁被OOMKilled,但监控显示容器的内存使用量远低于限制。排查发现,真正的元凶是容器被配置了过高的文件描述符限制(1048576),每个文件描述符在内核中都会分配相应的数据结构,累积起来消耗了大量的内核内存,最终触发了OOM Killer。 ...