2014-02-25 26 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以了解关于最终确定的更多信息。