比如FileStream或者说HttpClient 中的HTTPResponse,不关闭会发生什么呢?或者说调用close防范实际上在底层都做了哪些事?
比如FileStream或者说HttpClient 中的HTTPResponse,不关闭会发生什么呢?或者说调用close防范实际上在底层都做了哪些事?
你打开文件是会在系统里有一个文件句柄的,这个句柄数量操作系统里是有限的,如果不close,这个句柄所代表的资源就泄露了,就跟悬垂指针一样,如果量大或时间长了之后再打开文件就可能打不开了,超过了系统的限制
8 回答6.4k 阅读
1 回答4.2k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
3 回答1.7k 阅读✓ 已解决
1 回答2k 阅读✓ 已解决
看是什么类了, 不同的类的
close
里执行的逻辑当然是不一样的.close
就是用来做收尾工作的, 如果你学过servlet
, 可以认为就是servlet
的destroy
方法.有一些类会占用特殊资源(比如文件句柄, 线程, 数据库连接等), 而这些资源是有限的/比较消耗性能的, 而且不会自动释放(或者需要很久才能自动释放), 因此需要你在不用的时候及时释放, 避免浪费资源.
比如IO里面的:
FileInputStream
会占用系统里的一个文件句柄, 每个进程可以打开的文件数量是有限的, 如果一直打开而不关闭, 理论上迟早会遇到无法打开的情况.StringWriter
就没有什么.close
方法没什么卵用ps:
FileInputStream
的finalize
方法会自动调用close
方法. 但是需要等待很长很长时间. 所以最好自己手工调用.一般而言, 如果是接口里有
close
方法, 我们调用时是不应该关注close
里究竟执行了什么, 不调用是不是有坏处, 而应该是始终调用