毫无疑问,如果能通过很小的代价就能确定对象的生命周期并在结束时立即释放并对齐内存(把离散的堆转换为栈)是最理想的,这样既能实时回收内存,也不会产生碎片,也就不存在A模块空隙过多导致B模块申请内存不足却无法直接使用A模块的空隙内存而触发全局扫描A空隙内存并做大量的拷贝动作所引起的卡顿现象,虽说A的空隙内存能充当A对象的缓存加快A的内存分配,但一个复杂的程序会有很多不同长度的B,C,D……对象组成,你无法确定什么时候哪些模块空隙过多而导致其他模块内存不足,这就是根本原因,如果有方法能做到A1对象释放造成空隙时拿尚且存活的最高地址的A2填充它并有手段能以很小的代价将A2的索引重新关联到其所有的拥有者就不存在空隙,那么方法有吗,答案是肯定的。
不要随波逐流和一味地迷信权威,很多东西只要get到原理的根本点多加思考和尝试,你能颠覆很多看似高大上的GC方案,其实真正优秀的自动内存管理方案是不存在GC的,也不会有循环引用,但却能以最小内存开销长期稳定运行。对了,为了吞吐量我只会开内存池做cache,而不是所谓的GC gap。
我做的编程语言就能做到内存实时回收并且不会产生内存碎片,github搜CZL编程语言,它的内存管理模块大概是这样的: 上层采用原子性垃圾扫描技术,中层采用引用计数和虚拟地址映射,底层采用不定长分页、内存池、范围分级和内存填充技术。如果你质疑它的性能或实时性或碎片率,可以参考说明手册和主流的自动内存管理编程语言做实验对比,你会发现神奇的东西。