正如每个 java 开发人员都知道的那样, java 对象在不再使用时将被垃圾收集。我想知道 JVM 如何识别必须选择哪个对象进行垃圾收集。(比如说……如果我有 10 个对象。如果 2 个对象被垃圾收集,那么 10 个对象中 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 收集。如果我明确地将空引用(s1,s2)变为空,但是在堆上分配的内存会发生什么?它会被释放吗?