一般在C++的学习过程中,学习到static成员的时候,都会举统计对象个数的例子,在Java中也可以用同样的实现方法。比如,学生类Student,其中添加代码:
class Student{
public static int num;
public Student(){
num++;
}
}这样每次new一个Student的时候都可以给num加1,从而实现对象的计数。但由于java中没有析构方法,所以无法析构,从而导致num无法减1。java中虽然提供了finalize方法,但是该方法未必会被调用,这样可能无法满足要求。现在的要求是:当一个Student对象没有用的时候,需要释放其内存,并将num减1,那么该如何实现呢?
class Student{
public static int num;
public Student(){
num++;
}
}这样每次new一个Student的时候都可以给num加1,从而实现对象的计数。但由于java中没有析构方法,所以无法析构,从而导致num无法减1。java中虽然提供了finalize方法,但是该方法未必会被调用,这样可能无法满足要求。现在的要求是:当一个Student对象没有用的时候,需要释放其内存,并将num减1,那么该如何实现呢?
num++;
}
只是个构造函数,如果用num来计算,上面这段代码也可以一定意义上计算个数。但是真没有听过java可以计算对象的个数,希望高手来解答,关注
private static int i = 0; public T() {
i++;
} public static int getNumber() {
return i;
} public static void main(String[] args) {
T t1 = new T();
T t2 = new T();
T t3 = new T();
T t4 = new T();
System.out.println("一共创建了" + T.getNumber() + "个对象");
}
}
在jdk的安装目录下找到bin然后打开jconsole.exe
关于jconsole的使用网上有很多资料我就不在这里啰嗦了楼主搜一下就可以了
希望能帮到你
用System.gc(),只能建议JVM进行垃圾回收,但垃圾回收工作也不一定执行
所以回收的对象是没办法控制的。
private static int i = 0; public T() {
i++;
} public static int getNumber() {
return i;
} public static void function(){
i--;
} public static void main(String[] args) {
T t1 = new T();
T t2 = new T();
T t3 = new T();
T t4 = new T();
System.out.println("一共创建了" + T.getNumber() + "个对象");
t1=null;
T.function();
t2=null;
T.function();
....
....
}
}
}
要想确定回收还不简单,直接在t1=null 后面加个System.gc();
public deleteStudent(Student student){
num--;
student = null;
}
在程序中控制调用这个方法就行啦