Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未命名类上的垃圾收集_Java_Class_Arraylist_Garbage Collection - Fatal编程技术网

Java 未命名类上的垃圾收集

Java 未命名类上的垃圾收集,java,class,arraylist,garbage-collection,Java,Class,Arraylist,Garbage Collection,Java GC如何在这样的简单情况下工作: ArrayList<Object> list = new ArrayList<>(); list.add(new Object()); list.add(new Object()); //do something with objects list.remove(0); ArrayList list=new ArrayList(); 添加(新对象()); 添加(新对象()); //用物体做点什么 列表。删除(0); 通常情况

Java GC如何在这样的简单情况下工作:

ArrayList<Object> list = new ArrayList<>();

list.add(new Object());
list.add(new Object());
//do something with objects
list.remove(0);
ArrayList list=new ArrayList();
添加(新对象());
添加(新对象());
//用物体做点什么
列表。删除(0);

通常情况下,如果使用“对对象执行某些操作”中的对象使其保留,则尽管有
列表,但不会对其进行垃圾收集。请删除
调用

另外,请尝试并确保在尽可能短的范围内声明
列表。最接近使用它的地方。这将使列表自动脱离范围,并更早地进行GC


此外,有时您可能希望在使用完对象后将其设置为null。这也有助于使其脱离范围并符合GC的条件

首先:类
对象
不是“未命名类”。如果有的话,我们可以在上下文中使用这个术语

GC保留所有活动的对象,即可从GC根访问的对象。将丢弃所有其他对象。局部变量是(除其他外)GC根

您所描述的是没有直接指向对象的引用变量的情况,例如
object myObj=new object()

但是,有一个列表包含对对象的引用

现在,如果GC运行会发生什么

  • 在<代码>列表之前。删除(0)您的对象将被标记为活动对象,因为它是 可通过列表间接访问

  • 在<代码>列表之后。删除(0)(并假设“对对象执行某些操作” 不涉及建立对对象的另一个引用)您的 GC不会将对象标记为活动对象,因为它不可访问 不再之后,对象占用的内存将为 标记为免费的


然后,您的第一个对象符合垃圾收集的条件(假设“对对象执行某些操作”不会执行使其不符合条件的操作)。就这些。啊,好的,谢谢。在我的实际程序中,我想我使它在程序的其他地方不可迁移。在你的第三段中,你提到将对象设置为null。你的意思是将对象的列表位置设置为null吗?不,我的意思是在处理完列表中的对象后,将其设置为null。