为啥“GC标记-清除算法”与“写时复制技术(copy-on-write)”不兼容( 二 )


a2.v=a2; //发生循环引用,A引用计数为2
a2=0; //A引用计数减为1,但A没有被任何变量引用到,这就造成了内存泄露
//如果执行a2.v=a2;时不是将A引用计数加一而是a2.v指向一个新的对象C,那么循环引用问题就解决了

答者自己设计的编程语言CZL拥有目前世界上最先进的GC机制,为什么我敢这么说呢,因为它支持写时复制和实时垃圾回收却不存在循环引用,它可以通过简单的配置来适配服务器模式、多线程模式、多进程模式、内存吃紧模式和自适应模式,无论哪种模式,它都能保证写时复制和实时垃圾回收,不同模式的区别只是在于缓存大小和内存搬移次数的衡量罢了,内存充足的情况下搬移次数少,内存吃紧的情况下,搬移次数多,但每一次内存搬移的量是很少的、确定的,用户感知不到发生内存搬移,往往一次搬移的量在几KB到几十KB之间,那是微妙级的,而目前主流的GC需要跑监督线程和垃圾回收线程,并且一次全局扫描和内存搬移的量是不确定的,最糟糕的是往往量还很大,这就导致GC卡顿了,在实时性要求高的网络游戏和网络交易等场合就没办法胜任了。

■网友
感觉一楼的朋友回答的挺好的了,我在网上看到了比较简短的解释,搬运:"不兼容" 的意思是说这会导致不必要的内存页复制.mark-and-sweep的标志位和对象本身是放在一起的, 写这个标志位会导致对象那一页被复制.
而bitmap marking的标志位和对象本身在内存的不同位置, 避免了此问题.来源人类身份验证 - SegmentFault


推荐阅读