【问题标题】:Does Java GC dellocates null elements of an array?Java GC 会重新分配数组的空元素吗?
【发布时间】:2014-09-25 03:37:35
【问题描述】:

我想“删除”数组的某些元素,当我将它们设置为 null 时,这些元素在我尝试打印它时没有出现,它们是被“垃圾收集器删除”还是 println 方法忽略了空值?例如:

this.E = new String[3];
E[0]="blue";
E[1]="red";
E[1]="gray";
this.E[0] = null;
for(int i = 0 ; i < E.length ; i++)
    System.out.println(E[i]);

该代码只输出红色和灰色,所以蓝色被释放内存或空值被忽略,因为它不代表任何东西?

【问题讨论】:

  • 能否请您在此处输入一些代码并更详细地说明您的问题?
  • 我不确定问题是什么。 Null 为空。
  • 当我尝试打印空值时,它会输出“空值”。您能否显示重现此代码的代码(尽管对于您的问题,空值相当于什么都没有,它们不是垃圾收集)
  • 不,如果该元素在一个已分配的数组中并且只要程序正在运行,它们就不会被 GC 忽略。 System.out.println 也不会忽略数组元素的空值,并且应该打印空字符串。
  • 如果这是对它的唯一引用,那么此时它通常符合 GC 条件。但是您所看到的与 GC 无关。您的问题与null 有关,因为E[0] 不再引用字符串“blue”。这忽略了 JVM 可能对字符串“blue”执行的优化 - 字符串实习或字符串池等

标签: java memory-management garbage-collection


【解决方案1】:

值保留在内存中,GC 需要重新分配整个数组来做你想做的事情

【讨论】:

    【解决方案2】:

    这也取决于其他线程。如果已删除的对象被任何活动线程引用,则它不能被垃圾回收

    【讨论】:

    • 线程是答案中不必要的复杂性,重要的是其他参考
    猜你喜欢
    • 2012-10-25
    • 2015-09-29
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 2020-07-28
    • 2021-02-25
    • 1970-01-01
    • 2010-10-29
    相关资源
    最近更新 更多