A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈汉帆 中级黑马   /  2012-3-15 13:13  /  2303 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

java中有垃圾回收机制,IO流操作中为什么还要调用close进行方法关闭呢?

4 个回复

倒序浏览
流不单在内存中分配了空间,也在操作系统占有了资源,java的gc是能从内存中回收不使用的对象,但对操作系统分配的资源是无能为力的,所以就要调用close()方法来通知OS来释放这个资源。
回复 使用道具 举报
java是带有垃圾回收功能,能搞定java本身资源,但是对于调用系统自身资源垃圾回收机制就搞不定,所以需要在代码中手工添加。
回复 使用道具 举报
这是两个不同的概念。java中的垃圾回收机制的作用是:当程序在运行的过程中,我们因为可能会产生许多的不再需要的变量,或者对象等等,我们称之为垃圾,如果程序很大,并且它在运行时不断地产生垃圾,那么早晚这些垃圾会把虚拟机所分配的最大内存空间给占用完了。我们的程序也就停止了运行。
io流它调用的是底层资源是你系统的东西,是你告诉了jvm给我分配一个输入或输出流,我需要使用了。当你不再需要这个底层资源的时候,java回收机制不能将它回收的,因为它不属于jvm所能操纵的,我们说io流是你告诉系统开启的,当你不需要使用的时候,自然要让jvm告诉系统我不需要了,你把它关了吧。跟垃圾的回收机制没有沾边。它不是jvm运行时产生的垃圾。而是系统分配的资源,用的时候我就给你,不用的时候你就得告诉我,我就给你关了。这是一种跟底层交互的机制。

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
gc回收的是内存里的数据
而资源是操作系统负责分配管理的 如果不关闭 操作系统会一直保留
比如用java申请了一台打印机的资源,如果使用完了之后没有关闭该资源,那么其它程序就无法得到打印机的使用权
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马