黑马程序员技术交流社区

标题: java中垃圾回收机制 [打印本页]

作者: 黑马-zhangping    时间: 2012-11-3 15:04
标题: java中垃圾回收机制
java中有垃圾回收机制,为什么还要用close()对其进行一些释放资源的操作呢,两者有什么区别?

作者: 邱峁    时间: 2012-11-3 15:36
java的垃圾回收器只会释放掉那些java对象所占的内存。无法释放数据库api创建的资源。
close方法就是用来施放那些资源的。如果你没有每个都close,会导致内存泄漏

作者: 齐连涛    时间: 2012-11-3 15:38
垃圾回收是回收内存中不再使用的对象,释放那部分内存
close()关闭资源,是关闭CPU资源,不关闭,会继续占用CPU,也就是占用资源,所以要关闭

作者: 奋斗的青春    时间: 2012-11-3 16:25
本帖最后由 吴愿涛 于 2012-11-3 16:29 编辑

close()方法释放的是正在占用的资源,而不是持有资源的对象;
java垃圾回收机制(GC)回收的是对象,表现为回收对象分配的内存;但不能回收资源,如果不执行close,可能会造成资源耗尽。
也可以这么理解,jvm回收的是由java创建的对象占用的内存资源,但是有close()方法的java内置对象(比如:套接字对象,数据库连接对象)这些实际都占用了计算机的其他资源,所以实际释放的是计算机其他资源,而非java创建的对象占用的内存资源。所以close()方法是必须的。(比如使用了数据库的连接对象,如果不调用close()方法将会导致数据库的连接资源耗尽)

作者: 李靖    时间: 2012-11-3 17:07
close方法释放的是系统资源,例如对流进行操作时,对某一个文件进行读或写时,完成后需要用close方法,关闭正在使用的系统资源。
而对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2