java GC如何清理相互关联的对象
任何人都可以告诉我对象的相互之处是什么? java的GC如何解决这个问题? 提前致谢!
如果您有对象A和B,并且满足以下条件:
- 对B的引用
- B引用A
- 没有其他对象引用其中任何一个
- 它们不是根对象(例如常量池中的对象等)
然后,这两个对象将被垃圾收集。 这称为“循环引用”。
这是因为标记和扫描GC将扫描并找出可从根对象访问的所有对象。 如果A和B在没有任何外部参考的情况下相互引用,则标记和扫描GC将无法将它们标记为可达,因此将被选为GC的候选者。
有许多不同的标记和扫描实现(天真的标记和扫描,三色等)。 但基本思想是一样的。 如果无法通过直接/间接引用从根目录访问对象,则将对其进行垃圾回收。
有许多GC。 在Young Generation中,有一个副本收集器。
这样做是找到从“根”对象引用的所有对象,例如线程堆栈。 例如,将伊甸园空间复制到幸存者空间,并将幸存者空间相互复制。 任何未被复制的东西都会被清除掉。
这意味着如果你有一对彼此引用的对象,并且没有对它们中任何一个的强引用,它们将在下一个集合中被丢弃。 (GC可以选择保留或不保留的软引用除外)
- 如何读取嵌套的JSON以进行聚合?
- 无法在Android Studio 2.1.1的gradle.properties文件中设置JVM参数gradle
- 如何检查Quartz cron作业是否正在运行?
- 如何运行带有故障安全的TestNG套件而无需解压缩依赖jar?
- 方法链的优点和缺点以及由对象本身替换所有void返回参数的可能性
- SSL通信中的Apache CXFexception:SocketTimeOut
- JPA / Hibernate:CriteriaBuilder – 如何使用关系对象创建查询?
- 如果解码,两个不同的BASE 64编码字符串可以产生相同的字符串吗?
- 应用程序包Mac OS X Leopard