我有几个类,其中一个需要计算对象的创建次数(int字段名为lastId)。 在c ++中,我们必须在主类中初始化静态字段值,然后我们能够在其他类中正确使用该静态字段并计算已创建的对象数。 小丑怎么样?我在哪里初始化静态字段值。 另外,我知道如果创建了对象,如何计算,但是如果对象被删除了怎么办? java中没有析构函数,那么如何完成这项工作呢?
答案 0 :(得分: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
这将按类别为您计算实例数。
如果您想要查看应用程序正在执行的操作,请尝试
jvisualvm
这将提供所使用的内存,线程等统计信息以及此处的CPU故障以及创建的对象。
java怎么样?
您只需使用类似
的内容对其进行初始化static int counter = 0;
我必须在哪里初始化静态字段值。
您将初始化任何其他字段的位置相同。
BTW如果你这样做了
static int counter;
无论如何它默认为0,所以我怀疑你不需要初始化它。
如果对象被删除了怎么办?
这很简单,因为你无法删除对象。所以答案永远是0.;)
java中没有析构函数,那么如何完成这项工作呢?
Java没有这样的东西,所以这个问题没有任何意义。
答案 1 :(得分:1)
您可以在声明或静态初始值设定项中初始化:
public class test
{
//this is fine:
public static int i = 1;
//or this:
public static int i;
static
{
i = 1;
}
}
答案 2 :(得分:0)
如何初始化静态字段? 1.声明时初始化字段。 2.在静态块中初始化。 3.初始化为null并从其他位置设置。这并没有真正初始化为稍后设置有意义值的值。
请参阅Dave Doknjas的答案。
如何计算物体?见Peter Lawrey的回答。
Destructors怎么样? 由于为您处理了对象集合,因此当对象没有引用时,实际上并不需要析构函数。您不应该尝试在Java中管理自己的集合,它对您来说非常出色。如果在收集对象时绝对需要完成某些操作,则应该查看finalize方法,它将在收集对象时运行。
有关最终确定的详细信息,请参阅http://javarevisited.blogspot.com/2012/03/finalize-method-in-java-tutorial.html。