全自动内存管理大大提高了生产率和完整性,但通常的实现(GC)有一个关键问题。这是不确定的,也是无法控制的。这导致许多问题,如突发CPU负载,这是关键的实时应用程序。某些类型的优化(增量/并发GC)可以减少这些问题,但仍然是不确定的,不能完全消除问题。
我一直认为GC永远不能解决这个问题,但最近,我认识到GC操作不需要完全隐藏。通过公开一些设计正确的行为控件,GC也可以是确定性的和CPU突发的.
我认为(RC +手动调用循环检测)可以做到这一点。但这看起来不太有效。是否有更好的方法来实现确定性和可控的全自动内存管理?或者我可以获得一些到示例实现的链接吗?
我增加了这些行,以使我的问题更清楚。
发布于 2013-02-21 15:16:38
让我换个说法。
他说:“我是否可以取得一个绝对完善的内存管理系统,并拥有每一个理想的特性?”
不存在这样的系统。
发布于 2013-02-21 17:06:17
C++ RAII模型为您提供确定性和自动内存管理(从库使用者的角度)。这不是你想要的,但这是个开始。尽管它是一种可选择的设计,但您必须显式地选择将它与智能指针一起使用。从理论上讲,库用户对内存管理一无所知,并获得与Java相同的自动清理功能。
也许一种带有“强制”RAII的语言可以接近你想要的东西。
RAII的确定性很好,因为它允许您将同样的技术应用于比内存更珍贵的资源。例如连接和手柄。
void foobar()
{
//connections are even more precious than memory. A leak is bad news.
Connection conn("foobar");
conn.Open();
}//conn is automatically closed as it leaves scope. Memory is free too.发布于 2013-02-21 17:39:07
Butler Lampson在“计算机系统设计提示”(操作系统评论,1983年10月15日,第33至48页)中描述了一个系统,它结合了一个基于自动参考计数的增量收集器和一个可以清除无法到达的循环引用的跟踪和扫描收集器。其思想是,应用程序可以依靠增量收集来完成大部分工作,然后执行“停止世界”垃圾收集“在咖啡休息期间用于回收累积的循环结构。”
根据那篇论文,这是在Interlisp和Cedar编程环境中实现的.它引用了两篇我还没有读过的文章--兰普森声称--更详细地描述了这位收藏家:
https://softwareengineering.stackexchange.com/questions/187881
复制相似问题