「垃圾回收算法」
托管运行时把内存管理交给垃圾回收器,代价是必须理解可达性、根集与暂停。本文讲解标记清除、复制、标记整理三大基础算法,分代假设与晋升策略,三色标记与写屏障,并发与增量 GC 的取舍,以及 STW 暂停的度量与调优手段。
tag
托管运行时把内存管理交给垃圾回收器,代价是必须理解可达性、根集与暂停。本文讲解标记清除、复制、标记整理三大基础算法,分代假设与晋升策略,三色标记与写屏障,并发与增量 GC 的取舍,以及 STW 暂停的度量与调优手段。
深入 C# 的值类型与引用类型差异、分代垃圾回收与箱拆箱代价,理解泛型与 record 等现代语言特性,并掌握 Span、ref struct 等高性能内存访问手段。
系统讲解 Linux 内存管理:虚拟内存与分页机制、页表与 HugePages、slab 与伙伴系统、swap 交换与 LRU 回收、OOM killer 与 cgroup 内存限制、NUMA 内存策略、vm.swappiness 等调优参数,以及 free/ps/vmstat/smem 故障排查与内存泄漏实战。
cgo 最危险的从来不是性能,而是指针:一个不合规的指针传递就能让程序在几分钟后随机崩溃。本节实测 cgocheck 的拦截行为、Go 1.21 引入的 runtime.Pinner、C.CString/C.free 与 GC 的边界,并给出一张「什么能传、什么不能传」的规则表。
虚拟内存是操作系统中最精妙的设计之一。它让程序可以方便地使用连续地址空间进行编码,而无需关心复杂多变的物理内存布局。同时,它也为操作系统调度、进程隔离和内存安全提供了底层支撑。从最早的段页式管理,到现代 x86-64 的多级页表,虚拟内存始终是操作系统与硬件交互最核心的环节之一。
引言:堆内存的演进之路 在 Linux 系统中,当程序请求一块内存时,操作系统并不会直接暴露物理页。相反,一个复杂的分配器层次逐步将大块虚拟地址空间切割成程序所需的小块。从用户态的 到底层的 / ,再到内核的 slab/slub 分配器,每一层都在性能、碎片率与并发能力之间做出权衡。
Linux 内存管理子系统是内核中最复杂的模块之一。它不仅要为进程分配物理页帧,还要在内存不足时做出艰难的权衡决策。本文从 overcommit 策略、OOM Killer、交换机制、cgroup 控制、内存水位以及诊断工具六个维度,系统地梳理 Linux 内存子系统的核心原理。
C++ 是一门赋予了开发者底层内存控制能力的语言。理解其内存模型不仅是编写高效代码的基础,更是排查复杂 bug、设计高性能系统的关键。本文将系统性地剖析 C++ 的内存布局、RAII 设计哲学、对象生命周期管理、内存对齐细节、对象切片问题以及 Placement New 技术,最后给出符合现代 C+
操作系统是计算机科学的基石,理解其原理是进行系统编程、性能优化与问题排查的前提。本专题系统覆盖进程与线程模型(PCB、调度算法 CFS/多级反馈队列)、内存管理机制(虚拟内存、页表、MMU、TLB、换页策略)、文件系统与 I/O 栈(VFS、inode、DMA、mmap、epoll/io_uring、NVMe 多队列与 io_uring 结合)、死锁与同步原语(信号量、互斥锁、条件变量、读写锁、RCU)、中断机制与系统调用、Linux 内核源码导读(启动流程、模块编程、内核数据结构)、容器与虚拟化的操作系统支撑(cgroups/namespace/KVM)、eBPF 可观测与内核追踪、实时调度(PREEMPT_RT)与可信安全加固(LSM/TPM),为后端工程师与系统开发者建立扎实的操作系统理论底座。
深入 Redis 内存管理原理,涵盖 jemalloc/glibc/tcmalloc 分配器对比、内存碎片与主动碎片整理、编码优化、驱逐策略、maxmemory 配置与线上内存暴涨排查
深入 Python 内存管理机制:引用计数、循环引用检测、分代垃圾回收、__slots__ 内存优化、对象池模式、内存泄漏排查工具(tracemalloc、objgraph),以及6个实用的性能调优技巧。
系统讲解 Go GC 的全流程,从三色标记算法、混合写屏障到并发回收的各个阶段,结合源码与性能调优实践
深入 Go runtime 内存分配器的三级架构,从 mcache 线程本地缓存到 mcentral 中心缓存再到 mheap 全局堆,结合源码与可视化图解完整解析
深入理解操作系统的内存管理机制:虚拟内存、页表、MMU、段页式管理与换页算法,掌握 Linux 内存布局与性能调优。
深入剖析Go语言数组与切片的底层原理,详解切片的三元组结构、append扩容算法、深拷贝与浅拷贝的区别,以及子切片内存泄漏等常见陷阱,附带性能对比与工程实战案例
逃逸分析:理解 Go 的内存分配策略 在 Go 中,你不需要像 C/C++ 那样手动管理内存,但这并不意味着你可以忽视内存分配。理解 逃逸分析 (Escape Analysis)对于编写高性能的 Go 代码至关重要。
指针:没有你想的那么可怕 提到"指针",很多人的第一反应是恐惧。这很正常——在 C/C++ 的世界里,指针确实是很多 bug 的根源:野指针、空指针、内存泄漏、缓冲区溢出……简直是一场噩梦。但是, Go 语言的指针完全不一样 。