像java golang都是预先申请一块内存,然后在之上做对象分配和回收,或者碎片整理。
如果垃圾回收只做可达性分析,创建对象直接调malloc分配内存, 需要回收时调free释放,就不需要整理碎片,可以降低STW的时间,也不需要额外占用内存。
为了提高分配对象的效率,可以新生代预分配内存,采用标记复制算法,老年代直接调系统的malloc和free。
这样是否可行?有什么语言GC是这么做的吗?
像java golang都是预先申请一块内存,然后在之上做对象分配和回收,或者碎片整理。
如果垃圾回收只做可达性分析,创建对象直接调malloc分配内存, 需要回收时调free释放,就不需要整理碎片,可以降低STW的时间,也不需要额外占用内存。
为了提高分配对象的效率,可以新生代预分配内存,采用标记复制算法,老年代直接调系统的malloc和free。
这样是否可行?有什么语言GC是这么做的吗?