use*_*621 -2 c# garbage-collection
假设我有一个引用另一个类的类,如下所示:
class1
{
}
class2
{
int A;
class1 B;
public class2(int a, class1 b){
A =a;
B = b;
}
Run Code Online (Sandbox Code Playgroud)
现在在另一种方法中我创建了一个新实例:
class3
{
class2 myobject;
mymethod()
{
class2 myobject = new class2(45, new class1( some parameters));
}
}
Run Code Online (Sandbox Code Playgroud)
当新的class1(一些参数)内存是免费的?
何时释放新创建的class1实例?
不可能肯定地说.垃圾收集器可以在选择时释放它,或者选择永不释放它.
可以释放内存的最新内容是什么?
不要求释放内存.该程序可以永远运行,永远不会收集.
最早可以释放内存的是什么?
它可以在分配实例后立即class2释放.鉴于永远不会读取局部变量,因此不需要实际存在局部变量.抖动可以将其优化,这意味着没有gc根class2,因此可以立即释放,因此class1它所持有的实例也可以.
更一般地说:虽然你想要了解运行时的工作方式是好的,但不要强调它.99.99%的时间垃圾收集器完全按照您的意愿完成,而不用考虑它.
| 归档时间: |
|
| 查看次数: |
223 次 |
| 最近记录: |