为什么知道是否需要某些内存是不可判定的?

时间:2015-12-24 13:02:00

标签: memory-management garbage-collection decidable

我正在使用Mozilla的Javascript教程,我来了解这条信息。

  

高级语言嵌入了一个名为“垃圾”的软件   收集器“其工作是跟踪内存分配和使用以便   查找何时不再需要分配的内存   在哪种情况下,它会自动释放它。这个过程是一个   因为知道是否有一些问题的一般问题近似   需要的内存是不可判定的(无法通过算法解决)。

我熟悉不可判断性和垃圾收集器的概念,但我似乎无法理解为什么这是一个不可判定的问题?

2 个答案:

答案 0 :(得分:10)

我通过收集无法再访问的内存来熟悉工作的所有垃圾收集器,例如:指向它的所有(传递闭包)变量超出了范围。但这是可以收集的内存空间集的低估,因为在任何时候内存位置仍然可以在范围内有一个指向它的变量,但它永远不会被再次访问。

查找可以收集的精确内存空间集可以简单地减少到任何未决问题 - 例如,找到可以在以下程序中的A点收集的内存空间集:

x = allocate()
// Point A
if (result of some known-to-be-undecidable problem is true):
  print(x)

所以发现这个集合本身就是不可判定的。

答案 1 :(得分:8)

因此,您可以修改任何程序以在堆上分配一些空间,并且只有在原始程序终止时才访问它。如果程序没有终止,那么最佳垃圾收集器只会收集内存。

我们可以决定程序是否会终止吗?