共 4 篇文章
三月 1, 2026
Go 语言 Goroutine 泄露:实战案例分析与排查指南
在 Go 语言开发中,Goroutine 泄露是一个非常隐蔽但致命的问题。它通常发生在一个 Goroutine 被启动后,因为某种逻辑阻塞(比如等待一个永远不会关闭的 Channel 或获取不到锁)而永远无法结束,导致内存逐渐耗尽。
和内存泄漏不同,Goroutine 泄露更难发现——因为 Goroutine 本身占用很小(通常只有几 KB),但成千上万个泄露的 Goroutine 会形成"蚂蚁搬家"效应,最终拖垮整个服务。
本文将分享 4 个实战中非常典型的 Goroutine 泄露案例,并提供排查工具和预防原则。
二月 28, 2026
Go 1.26 栈内存优化:深入理解 slice 的栈分配与逃逸
Go 语言以高效的垃圾回收(GC)著称,但在追求极致性能的路上,内存分配始终是绕不开的话题。2026年2月发布的 Go 1.26 带来了一个重要的编译器优化:现在可以在更多情况下将 slice 的后备存储分配在栈上,而不是堆上。
这意味着当你在函数内创建一个 slice 时,如果它不会逃逸出函数作用域,Go 1.26 会直接把它放在栈上,无需经过堆分配。这不仅减少了 GC 压力,还提升了缓存局部性,是一个"免费"的性能提升。本文将深入讲解栈与堆的区别、逃逸分析的原理,以及如何写出更高效的 Go 代码。
三月 26, 2018
深入理解 PHP 写时复制机制
一个例子:
<?php
$foo = 1;
$bar = $foo;
echo $foo + $bar;
变量 $foo 赋值给变量 $bar,这两个变量具有相同的值,没有必要新申请内存空间,他们可以共享同一块内存。在很多场景下 PHP 的 COW 对内存进行优化。比如:变量的多次赋值、函数参数传递,并在函数体内修改实参等。
九月 9, 2012
深入理解 PHP 内存管理:栈、堆与 zval 机制
PHP 是一种脚本语言,在运行时会将代码加载到内存中执行。理解 PHP 的内存管理机制,对于写出高效的 PHP 代码至关重要。本文将深入探讨 PHP 中的栈(Stack)、堆(Heap)以及 zval 内存管理机制。