class Gctext {
private String name;
public Gctext(){}
public Gctext(String name) {
this.name = name;
System.out.println(name + "建立"); }
// 对象回收前执行
protected void finalize() {
System.out.println(name + "被回收");
}
}class UseGc {
public static void main(String[] args){
System.out.println("请按Ctrl + c终止程序"); Gctext obj1 = new Gctext("Object1");
Gctext obj2 = new Gctext("Object2");
Gctext obj3 = new Gctext("Object3");
Gctext[] obj4 = new Gctext[10];
obj4[0] = new Gctext();
obj4[1] = new Gctext("数组内边"); obj1 = null;
obj2 = null;
obj3 = null;
obj4 = null;//建议回收对象
System.gc(); while(true);//不断执行程序
}}执行结果:
-----------------------------------
请按Ctrl + c终止程序
Object1建立
Object2建立
Object3建立
数组里边建立
数组里边被回收
null被回收
Object3被回收
Object2被回收
Object1被回收后建立的居然先回收!!这是规律吗??
private String name;
public Gctext(){}
public Gctext(String name) {
this.name = name;
System.out.println(name + "建立"); }
// 对象回收前执行
protected void finalize() {
System.out.println(name + "被回收");
}
}class UseGc {
public static void main(String[] args){
System.out.println("请按Ctrl + c终止程序"); Gctext obj1 = new Gctext("Object1");
Gctext obj2 = new Gctext("Object2");
Gctext obj3 = new Gctext("Object3");
Gctext[] obj4 = new Gctext[10];
obj4[0] = new Gctext();
obj4[1] = new Gctext("数组内边"); obj1 = null;
obj2 = null;
obj3 = null;
obj4 = null;//建议回收对象
System.gc(); while(true);//不断执行程序
}}执行结果:
-----------------------------------
请按Ctrl + c终止程序
Object1建立
Object2建立
Object3建立
数组里边建立
数组里边被回收
null被回收
Object3被回收
Object2被回收
Object1被回收后建立的居然先回收!!这是规律吗??
终于找到证据,说明 Object[] a = new Object[10]; 只是一个声明大小,没有在堆里分配内存。大家看看对不对?内容与标题好像不符哦
就是已经在堆里分配了,是吧?
因为通过调试可知,初值为0;