[英]Garbage collection in C# and Java
我知道垃圾收集器在找不到任何指向对象的指针时会收集分配的内存。 我想知道是否在循环中创建和初始化一些本地对象,这些对象是Java垃圾收集器收集的吗? C#呢?
如果我在局部函数中创建并初始化一些对象,它们会发生什么? 当本地功能运行完成时,它们会收集吗?
我想知道,局部对象与局部变量完全一样吗?
谢谢。
通常在函数中,为非对象变量在stack
分配内存,当函数完成执行时,将清除stack
并释放内存。
对于对象,内存中分配heap
(你会记得malloc()
和free()
C语言 )。 但是在Java和C#中 , free()
函数是垃圾收集器为您执行的操作,而不用担心它。
因此,即使在函数中,对象也是局部变量,但不是存储在stack
而是存储在heap
。 因此它们与int i
。 但是当功能完成时,这些对象不在范围内。 因此,您将不再有权访问它们,但是直到garbage collector
运行并清除它们后,它们的内存才被释放。
但是, garbage collector
运行方式(何时运行)全部基于不同的算法。 即使对于Java的不同实现,它们也可能是不同的(例如,sun Java的算法可能与其他Java实现不同)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.