我同意 Brian 的观点,上面的代码没有考虑 GC。所以我想用下面的代码片段替换你的代码
package com.instance.main;
import com.instance.target.Clasa;
public class Test{
public static void main(String[] args) {
Clasa targetClass;
Object[] object=new Object[10];
for(int i=0;i<object.length;i++){
object[i]=new Clasa();
}
System.out.println("Number of Instantiate Object {Before Calling GC}: "+Clasa .getNumberOfInstatiateObj());
/* Here I am trying to deallocate the memory of Object at index no 9, so that GC called this unused object to deallocate it from memory*/
for(int i=0;i<object.length;i++){
if(i==8){
object[i]=object[i+1];
object[i+1]=null;
System.runFinalization();
System.gc();
}
}
}
}
只需将上面的代码放在 main 方法下面,您还必须从下面的代码中修改您的 Clasa 代码
包 com.instance.target;
类克拉萨{
private static int nbInstances = 0;
public Clasa () {
nbInstances++;
}
public int getNo() {
return nbInstances;
}
public void finalize(){
nbInstances --;
System.out.println("Number of Instantiate Object {After Calling GC}: "+nbInstances );
}
}
按照上述步骤修改代码后,您的代码将为您提供所需的输出。
如果我在某些地方错了,请让我纠正。
嗨 Dany 我修改了我的代码,所以根据上面的代码,你必须在编写类代码的不同包下创建你的类。如果您仍然遇到问题,请告诉我。