2012-07-31 39 views
0

我的主要問題是,有多少對象在執行行在達到main的結束行時,有多少個對象有資格進行垃圾回收?

Dozens [] da = new Dozens[3]; 

有多少對象將是符合垃圾收集的主要功能到底是真是創建

class Dozens { 
    int[] dz = {1,2,3,4,5,6,7,8,9,10,11,12}; 
} 

public class Eggs { 
    public static void main(String[] args) { 
    Dozens [] da = new Dozens[3]; 
    da[0] = new Dozens(); 
    Dozens d = new Dozens(); 
    da[1] = d; 
    d = null; 
    da[1] = null; 
    // do stuff 
    } 
} 
+1

這是功課? – 2012-07-31 08:44:33

+4

你想出了什麼?你爲什麼想知道? – 2012-07-31 08:45:35

+0

我在SCJP書中得到了一個值得懷疑的答案,他們給出了總共五個對象的創建。但我認爲3. – 2012-07-31 08:51:55

回答

2

執行Dozens [] da = new Dozens[3];一後單個對象將被創建。 main方法完成後,如果您未創建使用main中創建的對象的另一個線程,則您創建的所有對象都可用於垃圾收集。

public class Eggs { 
    public static void main(String[] args) { 
    Dozens [] da = new Dozens[3]; //one array object created 
    da[0] = new Dozens(); // one Dozens object created 
    Dozens d = new Dozens(); //one Dozens object created 
    da[1] = d; 
    d = null; //nothing available for gc here, as there is still a referrence to that Dozens object (da[1]) 
    da[1] = null; //da[1] available for gc 
    // do stuff 
    } 
} 
+0

是的,我發現共有3個對象將被創建,包括DA(數組對象),並且所有對象都可以用於GC。 – 2012-07-31 08:49:39

+0

我想你錯過了Dozens.class-Object的創作。據我所知,每個班級都會創建一個實例。 – 2012-07-31 08:50:02

+0

2個dz陣列怎麼樣? – assylias 2012-07-31 08:51:29

0

假設沒有介入GC,創建的三個實例都將符合條件。

有沒有原始陣列的拳擊。

+1

並且數組也是對象;) – 2012-07-31 08:46:07

+0

只有2個實例。 – assylias 2012-07-31 08:47:18

+0

數十個[] da =新數學[3];這一行應該只創建一個對象 – 2012-07-31 08:55:30

0

2實例,但什麼都ü與思索:O型

da[1] = d; //points 
d = null; //attended. 
da[1] = null; //already null. 
0

數十類包含一個int數組對象。因此,每次創建Dozens對象時,都會創建兩個對象(一個是幾十個實例,它們又包含一個int數組的實例)。

class Dozens{ 
    int[] dz = {1,2,3,4,5,6,7,8,9,10,11,12};} 
    public class Eggs { 
    public static void main (String args[]) { 
     Dozens [] da = new Dozens[3]; //one object capable of holding 3 instance 
     da[0] = new Dozens(); //2 object 
     Dozens d = new Dozens(); //2 object 
     da[1] = d;   //no new object d,da[1] point to same d object 
     d = null;   //one object for gc 
     da[1] null;  //one object for gc 
     //do stuff 
    } 
    } 
} 
相關問題