Java : garbage collection

标签 java garbage-collection

在一次采访中我被问到了一个有关垃圾收集的问题。

下面是一段代码。

List<String> a=new ArrayList<String>();
    a.add("one");
    a.add("two");
    a.add("three");
    a.add("four");

HashSet<String> h=new HashSet<String>();
h.add("four");
h.add("five");
h.add("six");

h.addAll(a);
a=null;

问题是:有多少对象符合垃圾回收的条件>

请解释一下。

最佳答案

本地范围内可见对象的一般答案:只有ArrayListHashSet 可通过范围内局部变量 h 访问,并且字符串可通过 HashSet 访问。只有无法访问的对象才有资格进行垃圾回收。

注释:

  1. 字符串文字具体可以在字符串池中分配,如评论中所述。在这种情况下,这些对象将不符合垃圾回收的条件。

  2. 只能通过特殊类型的引用(例如弱引用)才能访问的对象可能仍然符合条件。

  3. 对整个事情持保留态度,因为这是一个理论面试问题,其主题在实践中很复杂。例如,您不知道在幕后分配了哪些其他对象。或者,如果可以证明没有其他用途,那么即使对象(从语言的角度)可访问,也可能存在积极的 GC 来收集对象。

关于Java : garbage collection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26114023/

相关文章:

javascript - js中树对象实现的内存管理

Python:垃圾收集失败?

java - 获取 Java 中 Enum 常量的所有值? (是否有内置方法可以做到这一点,或者我需要编写自己的 setter/getter ?)

java - 直接分配给老年代的巨大对象的大小

java - 在 JUnit5 (Eclipse) 中创建 TestSuite

java - 不存在警报/未找到模式对话框 - WebDriver 无法捕获 JS 错误

java - 垃圾收集与交换、分页之间的关系

c# - 事件处理程序会阻止垃圾收集的发生吗?

java - 避免 Android 多次垃圾收集调用的高效循环

java - getter、setter 和循环