2025-11-20 05:57:23
伙伴系统内存来自创建对象时自动分配的堆内存,回收时由垃圾回收机制释放。创建新伙伴时系统会从堆内存切出一块空间,存储伙伴数据;伙伴不再使用时,系统检测到无引用后自动回收那块内存。这个过程像用剪刀裁布,既要有裁剪的主动分配,也要有回收的主动释放。
为什么是堆内存管理?因为伙伴系统需要动态扩展和收缩内存空间,堆内存相比栈内存更灵活。根据Linux内核文档,堆内存默认大小约1.4GB(不同系统有差异),而伙伴系统GC触发频率设置为每100ms检测一次,这样既能保证内存及时回收,又不会过度占用CPU。比如当创建1000个伙伴时,系统会分批从堆内存切割出总大小约500MB的空间,每个伙伴分配50KB。回收时检测到这些伙伴无引用后,GC会逐个释放对应的50KB内存块,重新合并成更大连续块供下次使用。这种"分配-使用-回收"的循环,就像不断往布袋里装沙子又倒出来,既保证内存不浪费,又避免布袋撑破(内存溢出)。
本题链接: