【发布时间】:2023-03-17 00:19:01
【问题描述】:
我正在阅读 Scott 的 Programming Language Pragmatics,我想知道以下问题:
垃圾回收(例如通过引用计数)是否仅用于回收堆对象或堆和堆栈中的对象?
例如,在使用垃圾回收的 Python、Java 和 C# 中, 一旦超出范围,堆栈对象是否会自动释放而不进行垃圾回收?
【问题讨论】:
-
@DiskJunky 你的意思是堆栈对象的释放是由垃圾收集器控制的吗?
-
在 C# 中,对象的管理方式比“堆栈”和“堆”要复杂得多。有不同级别的内存分配(Gen0 到 Gen2)、大对象堆等。在您的问题的上下文中,C# GC 两者兼而有之
-
从一开始,它们就从来没有真正在堆栈上。在 C# 中如何分配和释放内存是相当复杂的。排除非托管引用后,GC 将遍历所有相关的内存部分以根据需要解除分配
-
这个问题实在是太笼统了。你需要缩小范围。 C#、Python 和 Java 都有非常不同的垃圾收集方式。如果您想了解 Python 垃圾收集器,请仅询问 Python。 C# 和 Java 也是如此。
标签: java c# python garbage-collection programming-languages