我正在使用Mozilla的Javascript教程,我来了解这条信息。
高级语言嵌入了一个名为“垃圾”的软件 收集器“其工作是跟踪内存分配和使用以便 查找何时不再需要分配的内存 在哪种情况下,它会自动释放它。这个过程是一个 因为知道是否有一些问题的一般问题近似 需要的内存是不可判定的(无法通过算法解决)。
我熟悉不可判断性和垃圾收集器的概念,但我似乎无法理解为什么这是一个不可判定的问题?
答案 0 :(得分:10)
我通过收集无法再访问的内存来熟悉工作的所有垃圾收集器,例如:指向它的所有(传递闭包)变量超出了范围。但这是可以收集的内存空间集的低估,因为在任何时候内存位置仍然可以在范围内有一个指向它的变量,但它永远不会被再次访问。
查找可以收集的精确内存空间集可以简单地减少到任何未决问题 - 例如,找到可以在以下程序中的A点收集的内存空间集:
x = allocate()
// Point A
if (result of some known-to-be-undecidable problem is true):
print(x)
所以发现这个集合本身就是不可判定的。
答案 1 :(得分:8)
因此,您可以修改任何程序以在堆上分配一些空间,并且只有在原始程序终止时才访问它。如果程序没有终止,那么最佳垃圾收集器只会收集内存。
我们可以决定程序是否会终止吗?