首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java中标记为垃圾收集和符合垃圾收集条件的

在java中标记为垃圾收集和符合垃圾收集条件的
EN

Stack Overflow用户
提问于 2017-12-31 06:34:34
回答 1查看 99关注 0票数 1

我正在研究Java中的垃圾收集的概念。据我所知,它说GC在后台定期运行,并检查任何不可引用或不可访问的对象。但是当内存受到某种压力时,只有GC才能完成。同样,GC有标记阶段,重新定位阶段etc..In,在第1行的末尾,由于不能保证GC始终运行,或者在第1行之后被标记为GC的,第1行末尾的对象是否符合垃圾收集的?

如果我的任何陈述都是错的,请纠正我。

代码语言:javascript
复制
public class ImmutableStrings
{
    public static void main(String[] args)
    {
        String one = "someString";
        String two = new String("someString");
        String three = "someString";
        one = two = three=null;
        System.out.println("testing "); // 1
        System.out.println("testing again");// 2
    }
}

在第1行,有多少对象被标记为垃圾收集?据我所知,两个对象将是合格的GC和无标记的。答案可能会有所不同

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-31 08:06:21

在GC实际运行之前,没有标记为垃圾收集的对象。并且标记是由垃圾收集器做出的,并且只有在GC运行时才有效/有意义。

因此,询问对象是否在代码中的特定点被标记是.毫无意义。

您可能试图区分不可访问的对象与GC实际收集的对象。但是,即使是这样,通常也是无法回答的,因为不同的Java在收集对象时的行为有所不同。

至于什么是符合垃圾收集条件的,计数取决于JVM / GC实现,以及如何计数对象。例如:

  • 由显式String创建的new对象(很可能)是不可访问的。
  • 与字符串文本对应的String对象可能不是不可访问的。(除非GC足够聪明地意识到main方法不能再次使用它们.这不太可能)
  • 但是..。第一个String对象实际上有一个char[]
  • 还有..。System.out.println("testing ")调用可能会生成垃圾。
  • 还有..。可以有任意数量的JVM创建的其他对象(在实例化JVM、构建args数组、加载类等过程中),这些对象在这一点上是不可访问的。

简而言之,小测验提出的问题太模糊,无法得到明确正确的答案。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48040532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档