为什么每次下载后必须关闭掉IO流?
Posted vole
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么每次下载后必须关闭掉IO流?相关的知识,希望对你有一定的参考价值。
读一个文件,忘记关闭了流,你在操作系统里对这个文件的写,删除等操作就会报错,告诉你这个文件被某个进程占用,这是为什么呢?
java是从c++设计来的,但是无论是C语言还是C++,都需要手动释放内存,java不需要。
因为java在对象的引用被消除之后,正常情况下,内存资源是会被垃圾回收。
使用完IO流,必须手动回收,这是为了回收系统资源。
一般来说,需要自己close的东西,都是用了虚拟机之外的资源,例如端口,显存,文件等,虚拟机无法通过垃圾回收释放这些资源,只能显式调用close方法来释放。比如释放占用的端口,文件句柄,网络操作数据库应用等。
一般来说,IO操作的底层就是这个步骤进行实现的,只要存在读写操作,无论使用到的是缓存IO,文件IO,还是块IO,都是需要和计算机内文件打交道的。清理计算机硬件上面的垃圾,虚拟机的本职能就没有这个任务。
gc()有下面的特性:
1)gc只能释放内存资源,而不能释放与内存无关资源。
2)gc回收具有不确定性,你根本不知道它什么时候会回收。
而对于需要程序员手动回收的资源往往具有这样的特点:
1)资源开销大,不用需要立即释放;
2)资源是系统唯一的,不释放会导致别的程序也无法使用该资源。
也就是说,对于具有这些特点的资源就必须保证不使用后能够立即释放出这部分资源,而不能把这么重要的事情交给一个具有不确定性不靠谱的gc来完成。
以上是关于为什么每次下载后必须关闭掉IO流?的主要内容,如果未能解决你的问题,请参考以下文章