JVM的Java对象垃圾收集

马努

每个Java开发人员都知道,不再使用Java对象时将对其进行垃圾回收。我想知道JVM如何确定必须选择哪个对象进行垃圾收集。(比如说..如果我有10个对象。如果10个对象中有2个对象被垃圾回收,则jvm如何找到这两个对象)。

JVM使用“标记和清除”算法(如果正确的话)。

1)例如我在下面提供了字符串对象方案

  class Sample{

     public static void main(Strings args[]){
      String s1=new String("10");
      String s2=new String("20");
      String s3=new String("30");
      String s4=new String("40");
      String s5=new String("50");
      String s6=new String("60");
      String s7=new String("70"); 

        s1=null; //now s1 is eligible for gc collection
        s2=null; //now s2 is eligible for collection


 }
}

//现在s1和s2可以进行gc收集了。如果我明确地将null引用(s1,s2)设为null,那么分配给堆的内存又会怎样呢?会被释放吗?

布拉德·皮博迪

此处的内容非常简洁:http//www.brpreiss.com/books/opus5/html/page424.html

标记清除算法称为跟踪垃圾收集器,因为它可以跟踪程序直接或间接访问的对象的整个集合。

程序可以直接访问的对象是处理器堆栈上的局部变量以及引用该对象的任何静态变量所引用的对象。在垃圾回收的上下文中,这些变量称为roots。如果某个对象被某个其他(直接或间接)可访问对象中的字段引用,则该对象是间接可访问的。

因此,当您s1=null;断开根连接时,相应的实例就可以进行收集了。

实际的“收集”(释放堆)是在GC实际执行时发生的。至于确切何时发生,还没有一个万能的答案。请参阅Java中垃圾回收的频率是多少?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java:指向垃圾对象的垃圾对象会被垃圾收集吗?

来自分类Dev

Java:指向垃圾对象的垃圾对象会被垃圾收集吗?

来自分类Dev

Java-正在垃圾收集哪些对象?

来自分类Dev

Java中符合垃圾收集条件的对象

来自分类Dev

Java-正在垃圾收集哪些对象?

来自分类Dev

Java - Java8 中的 JVM 垃圾收集器

来自分类Dev

JVM垃圾收集和内存Java数据库

来自分类Dev

是否有在Java中11垃圾收集JVM ARGS更换?

来自分类Dev

JVM垃圾收集和内存Java数据库

来自分类Dev

垃圾收集对象的数量

来自分类Dev

垃圾收集链接的对象

来自分类Dev

垃圾收集-Java

来自分类Dev

如何在Java中垃圾收集String对象?

来自分类Dev

Java垃圾收集器如何识别未引用的对象?

来自分类Dev

如何在Java中垃圾收集String对象?

来自分类Dev

确保对象可以被垃圾收集

来自分类Dev

确保对象可以被垃圾收集

来自分类Dev

是否JVM垃圾收集对象被这些不再使用的局部变量引用?

来自分类Dev

这些垃圾收集设置的JVM性能

来自分类Dev

热点JVM垃圾收集器

来自分类Dev

Java垃圾收集参考类

来自分类Dev

Java垃圾收集 - 新门槛

来自分类Dev

JavaScript Blob对象何时被垃圾收集?

来自分类Dev

是否已收集WebGL对象垃圾?

来自分类Dev

在对象被垃圾收集后清理

来自分类Dev

垃圾收集环境中对象的生存时间

来自分类Dev

如何获取垃圾收集对象的统计信息?

来自分类Dev

垃圾收集函数中的对象数组

来自分类Dev

是否有可能识别对象是由垃圾收集器收集的,还是不是在Java中?