Java 垃圾收集了多少个对象?

Java 垃圾收集了多少个对象?,java,Java,在下面的示例程序中,在执行line Thread.sleep(1000)之前,将垃圾收集多少个对象 public类示例{ 公共静态void main(字符串[]args)引发InterruptedException{ GCExample gc=新的GCExample(); gc.doSomeThing(); 睡眠(1000); } 公共无效剂量测定法(){ Object[]obj=新对象[2]; 对于(int i=0;i给定GC的非确定性性质,我会说与一段字符串的长度相匹配的数字。在Thread

在下面的示例程序中,在执行line Thread.sleep(1000)之前,将垃圾收集多少个对象

public类示例{
公共静态void main(字符串[]args)引发InterruptedException{
GCExample gc=新的GCExample();
gc.doSomeThing();
睡眠(1000);
}
公共无效剂量测定法(){
Object[]obj=新对象[2];

对于(int i=0;i给定GC的非确定性性质,我会说与一段字符串的长度相匹配的数字。

Thread.sleep
之前,无法知道将垃圾收集多少项。它可能是零,也可能是整个对象数组,这意味着您将收集三个对象(来自此代码,但应用程序中可能有来自其他代码的其他代码)

但是,它将是0或3,因为当
obj
被取消根目录时,它的两个元素(2个新对象实例)也将被取消根目录,因此它们都将在同一过程中被收集


但是,很可能在那里看不到任何集合,也不会收集任何对象。

唯一确定的方法是测量它。您可以使用java.lang.ref.Reference


我的最佳猜测是不会有任何垃圾收集,但这可能因JVM而异。

您没有添加语言,但我假设是Java。这与多线程有什么关系?我们知道,这是
s.length()
我假设您知道,
引用
可能会以JVM特定的方式更改被引用对象的GC特征。
public class GCExample {

public static void main(String[] args) throws InterruptedException {
    GCExample gc = new GCExample();
    gc.doSomeThing();
    Thread.sleep(1000);
}
public void doSomeThing(){
    Object[] obj = new Object[2];
    for(int i=0;i<obj.length;i++){
        obj[i] = new Object();
    }
}