gc回收入门理解

1、我们都知道当我们new出一个对象时,就在堆内存分配了一个空间,存储这个对象,那么这些对象什么时候会消失呢,如果不消失,那么显然,随着创建的对象越来越多,内存分配越来越多,必然导致内存溢出。

java对象的回收是通过垃圾回收器实现的。

1、那么第一个问题,什么样的对象可以被回收

当一个对象失去引用时,便处于被回收的状态。但不能说对象一定会被回收

2、对象什么时候被回收

只要程序没有濒临存储空间用完的那一刻,对象占用的空间就总也得不到释放,如果程序执行结束,并且垃圾回收器一直都没有释放你创建的任何对象的空间时,则随着程序的退出,那些资源也会全部交还给操作系统,这个策略可以说恰当的,因为垃圾回收本身也会消耗内存。垃圾回收会调用 finalize()方法。

3、我们都知道java垃圾回收是自动执行的,大多数时候都不需要程序员管理存储空间的释放,但是仍然有极端的时候,需要程序员去重写finalize()方法,那么什么时候呢?

我们都知道Java一切皆对象,java所创建的对象都由垃圾回收器回收,但是java有些对象的创建,是由本地方法实现的,java的本地方法使用的语言是c/c++,那么c++创建的对象就不能由垃圾回收器回收了,这时候就需要我们重写finalize方法实现对象的回收。

4、垃圾回收算法,如何工作?

这方面算法并没有深入研究,只是知道从编程思想看到了这样一段话,自适应、分代的、、停止-复制、标记清扫、式垃圾回收器。

5、案例

通过重写finalize方法,输出一段话,通过调用system.gc()方法主动实现垃圾回收。

import org.junit.Test;
public class TestGc {
@Test
public void  testFinalize(){
Book book=new Book(true);
System.gc();
new Book(true);
System.gc();

}
}
class Book{

boolean checkOut=false;

Book (boolean checkOut){
this.checkOut=checkOut;
}
void checkIn(){
checkOut=false;
}
@Override
protected void finalize() throws Throwable {
if(checkOut){
System.out.println("error: gc collection");
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值