垃圾回收和GC

java回收器(GC,一下用GC代替回收器)并不是象一般人想像的那样定期的回收垃圾,从而让你完全不用当心内存的问题。事实是,JAVA还是存在内存溢出的时刻,只所以一般的系统和开发人员没有这么认识到,或者没有遇到,只是因为java jvm帮我们默默无闻的做了一些力所能及的处理!!其实,GC的工作原理是非常的复杂,以至于很多人没法说清楚,在这里,我就个人的理解,
总结一下:
1.GC并不是定期来回收你的垃圾内存,即是根据需要来回收。
2.GC的回收是因为:它认为你的系统已经开始内存紧张(这个就是jvm的神奇)
3.即使GC开始准备清理你的垃圾内存,但是如果该内存的引用还存在(不等于null),
这个时候GC仍然无能为力!
废话少说,看看下面的两个例子就知道了。
例子一:
public class finalizeTest{
public boolean checkout = false;
public void checkIn(){
this.checkout = true;
}
public void finalize(){
if (checkout)
{
System.out.print("the erroe");
}
}
public static void main(String[] args)
{
finalizeTest test = new finalizeTest();
test.checkIn();
System.gc();
System.out.println("Hello World!");
}
}
本来希望通过System.gc()命令来强制执行finalize()来处理清理事务,但是事与愿违,它没有执行。
只要main方法没执行完,永远都不会被回收。原因很简单,在main方法内
finalizeTest test = new finalizeTest(); 后的“System.gc();”是要求系统去回收垃圾。系统线程此时显然有闲暇时间,经过判断,发现test仍然引用着finalizeTest对象。所以,不会去回收test。
例子二:
public class TestGC{
public void finalize(){
System.out.print("the erroe");
}
public static void main(String[] args)
{
TestGC test = new TestGC();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值