一个含static字段的类的对象没有被引用是否会被GC回收?

[size=large]看到项目中有这里的代码,大家看下,一个类里面有一个static字段的变量,当new一个对象后,没有被引用,是否会被垃圾回收器回收?
比如,代码如下:[/size]
public class Sta {   
private static int s = 0;

public Sta(int i) {
setS(i);
}
public static int getS() {
return s;
}
public static void setS(int s) {
Sta.s = s;
}

}


public class StaDriver {   

public static void main(String[] args) {

new Sta(2);
System.out.println(Sta.getS());
System.gc();

System.out.println(Sta.getS());//如果被回收,值应该是0,否则为2,大家看呢?
}

}

[size=large]这里不讨论System.gc()执不执行的问题,这里主要强调理论上,一个含static字段的对象没有被引用后会不会被垃圾回收!!! [/size]


=====================================================================

[size=large]今天看到关于finalize()方法的使用,想到一种查用GC是否回收了对象的方法,方法如下:
可以把第一个类这样定义,增加一个finalize()方法,这样就可以看到效果了.[/size]
public class Sta {
private static int s = 0;

public Sta(int i) {
setS(i);
}
public static int getS() {
return s;
}
public static void setS(int s) {
Sta.s = s;
}

// 当一个对象要被GC回收里,此对象的finalize()方法将会被调用!
public void finalize(){
System.out.println("finalize() called !");
}

}



[size=large]再测试时,可以看到打印出的效果,可以证明对象的确被回收,但现在另一个问题是,对象被回收后,静态字段的值是2,非初始的0,此含静态字段的类的信息是否就是存储在程序所谓"静态存储区"呢?这个问题有待考证![/size]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值