• 为什么每次下载后必须关闭掉IO流(十五)


    读一个文件,忘记关闭了流,你在操作系统里对这个文件的写,删除等操作就会报错,告诉你这个文件被某个进程占用,这是为什么呢?

      java是从c++设计来的,但是无论是C语言还是C++,都需要手动释放内存,java不需要。

      因为java在对象的引用被消除之后,正常情况下,内存资源是会被垃圾回收。

      使用完IO流,必须手动回收,这是为了回收系统资源。

      一般来说,需要自己close的东西,都是用了虚拟机之外的资源,例如端口,显存,文件等,虚拟机无法通过垃圾回收释放这些资源,只能显式调用close方法来释放。比如释放占用的端口,文件句柄,网络操作数据库应用等。

    一般来说,IO操作的底层就是这个步骤进行实现的,只要存在读写操作,无论使用到的是缓存IO,文件IO,还是块IO,都是需要和计算机内文件打交道的。清理计算机硬件上面的垃圾,虚拟机的本职能就没有这个任务。

    gc()有下面的特性:

           1)gc只能释放内存资源,而不能释放与内存无关资源。

      2)gc回收具有不确定性,你根本不知道它什么时候会回收。

    而对于需要程序员手动回收的资源往往具有这样的特点:

      1)资源开销大,不用需要立即释放;

      2)资源是系统唯一的,不释放会导致别的程序也无法使用该资源。

      也就是说,对于具有这些特点的资源就必须保证不使用后能够立即释放出这部分资源,而不能把这么重要的事情交给一个具有不确定性不靠谱的gc来完成。

    如果错过太阳时你流了泪,那你也要错过群星了。
    在所有的矛盾中,要优先解决主要矛盾,其他矛盾也就迎刃而解。
    不要做个笨蛋,为失去的郁郁寡欢,聪明的人,已经找到了解决问题的办法,或正在寻找。
  • 相关阅读:
    超级女声杭州赛区7进5
    究竟怎么了?
    最近发现
    S2SH基于角色权限拦截
    基于S2SH的电子商务网站系统性能优化
    TSQL复习笔记(一)
    用户sa登录失败,该用户与可信sql server连接无关联
    SQL附加数据库报5120的错误的解决办法
    DotNet中配置文件的使用(一)
    JQuery中使用AJAX $.ajax(prop)方法详解
  • 原文地址:https://www.cnblogs.com/szrs/p/12653631.html
Copyright © 2020-2023  润新知