2014-02-25 68 views
0

我有幾個類,其中一個類需要計算創建了多少次對象(int字段名爲lastId)。 在C++中,我們必須初始化主類中的靜態字段值,然後我們能夠在其他類中正確使用該靜態字段並計算創建了多少個對象。 java呢?我在哪裏必須初始化靜態字段值。 另外,我知道如何計算對象是否已經創建,但如果對象已被刪除,怎麼辦? java中沒有析構函數,那麼這個工作怎麼做呢?在哪裏初始化java中的靜態字段?

+3

給它一個鏡頭,然後回來w你的問題/代碼 – Coffee

回答

2

如果你想要做的是計算呼叫類型

jps -lvm # to find the pid of your process 
jmap -histo {pid} # count all objects in the system 

積極對象的數量或

jmap -histo:live {pid} # count objects referenced 

這會給你一個co按類別排列的實例數量。

如果Wnt信號可視化你的應用程序在做嘗試

jvisualvm 

這將給像內存統計使用,線程等以及休息的到這裏CPU被消耗,這是創建的對象。


什麼java嗎?

你只是一些初始化他們像

static int counter = 0; 

我在哪裏必須初始化靜態字段值。

您將初始化任何其他字段的相同位置。

順便說一句,如果你這樣做只是這

static int counter; 

這將是默認爲0,無論如何,所以我懷疑你不需要初始化它。

如果刪除了對象,怎麼辦?

這很簡單,因爲您無法刪除對象。所以答案總是0.;)

java中沒有析構函數,所以這項工作怎麼做?

Java沒有這樣的事情,所以這個問題是沒有意義的。

+0

*我認爲有一種方法來跟蹤被刪除(垃圾收集)對象與'ReferenceQueue'或相關的東西,但這可能超出了題。 – trutheality

+0

@trutheality你說的都對。聽起來OP需要一個內存分析器,並且已經有工具可以做到這一點。 –

1

可以初始化無論是在聲明或靜態初始化:

public class test 
{ 
    //this is fine: 
    public static int i = 1; 

    //or this: 
    public static int i; 
    static 
    { 
     i = 1; 
    } 
} 
0

如何初始化靜態字段? 1。聲明時初始化該字段。 2.在靜態塊中初始化。 3.初始化爲空並從其他位置設置。這並不是真的初始化爲一個值,只是稍後設置一個有意義的值。

請參閱戴夫Doknjas答案的例子。

如何計算對象?見Peter Lawrey的答案。

毀滅者呢? 由於對象集合是爲你處理的,當沒有引用留給對象時,析構函數並不是真的需要。你不應該試圖在Java中管理自己的集合,它對你來說確實非常出色。如果在收集對象時絕對需要完成某些操作,則應查看finalize方法,並在收集對象時運行該方法。

請參閱http://javarevisited.blogspot.com/2012/03/finalize-method-in-java-tutorial.html以瞭解關於最終確定的更多信息。