java - 谁将决定任何对象是否符合垃圾收集的条件,决定这一点的参数是什么?

标签 java garbage-collection

<分区>

任何特定对象何时符合垃圾回收条件?决定这一点的考虑因素是什么?

MyClass mc = new MyClass();
mc.myMethod(); //line1

mc=null; //line2

mc=new object(); //line3
mc.myMethod(); //line4

mc=null; //line5

在这种情况下,mc 对象何时符合垃圾回收条件?

最佳答案

这个决定是由垃圾收集器自己做出的,一个对象被收集的条件是根据对它的引用的数量来决定的。因此,如果一个对象没有任何引用,它就会成为集合的候选者。

这并不意味着它是立即收集的,只是收集的候选对象。 对象集合受 generations 约束。机制:

An object is considered garbage when it can no longer be reached from any pointer in the running program. The most straightforward garbage collection algorithms simply iterate over every reachable object. Any objects left over are then considered garbage. The time this approach takes is proportional to the number of live objects, which is prohibitive for large applications maintaining lots of live data.

关于您的代码,在第一行 MyClass mc = new MyClass(); 中创建的对象在第三行 mc=null; 执行后立即成为集合的候选者;//第2行

按照相同的模式,在 line3 处创建了新对象(但我不认为该行符合您的预期:该行不应该是 mc = new MyClass ();?) 在第5行执行后成为候选者。

请注意,即使您删除了 line2,第一个对象也可以收集,因为它不再被引用。

关于java - 谁将决定任何对象是否符合垃圾收集的条件,决定这一点的参数是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26137291/

相关文章:

java - java.io.InputStream.read() 如何工作?

java - JSF 2 ManagedProperty 从依赖 jar 中注入(inject) bean

c - 当对象/表被垃圾回收时如何通知主机应用程序

java - 在所有用户定义的方法中调用 System.gc() 是一种好习惯吗

Java G1 GC : Programmatically finding the number of humongous regions before/after GC

java - 引用了未解析的外部符号 __imp__JNI_CreateJavaVM@12

java - Spring Boot : Calling an OAuth2 protected REST service

ruby-on-rails - Ruby on Rails - 加载缓慢并在垃圾收集器中花费大量时间

dom - 什么是 DOM GC 事件?

java - 从数据库中提取时间并在该特定时间发送消息