• java的手动释放资源


      因为刚从.net转到java,所以首先了解一下java的垃圾回收机制,java的close跟.NET的dispose是一样一样的。.NET存在托管资源和非托管资源之分,java也是同样,只不过java没有这两个名词。托管的资源不需要开发者理会,垃圾回收器会自动回收,而非托管资源则需要开发者手动回收。

      为什么呢,因为有些资源如数据库连接,io等等不仅仅包含对象所占内存,还包含一些物理资源(具体什么叫物理资源,还请知道的人以io为例介绍一下,鄙人不才对这些底层的东西不了解),而物理资源的释放是虚拟机无能为力的。手动调用close就是为了释放这些物理资源,而不是释放这个对象所占的内存。以下面代码为例,调用reader的close会把物理资源释放掉而与对象所占内存并无直接关系,可能有些非托管资源的close方法中恰好将对象置为了null。

    FileReader reader=new FileReader("E:\\1.txt");
    reader.read();
    reader.close();
    if(null==reader){
    System.out.println("kong");
    }else{
    System.out.println("fei kong");//输出结果是:fei kong
    }

    也就是说,需要手动释放的资源分为两部分。堆内存和物理资源,堆内存还是由垃圾回收器负责回收,物理资源则需要手动释放。如果将reader手动置为null,或者是不做任何操作,只会将对象相关的堆内存由垃圾回收器回收掉,物理资源仍然存在,直到程序退出。

    本人学识尚浅,欢迎交流。 倘若文章帮到了您,那真是好极了。
  • 相关阅读:
    csp 初赛 (不懂的地方)
    4月11日晚科目一练习(95分)
    在博客园利用 MathJax 建支持 $\LaTeX$ 的博客
    4月9日科目一练习(88分)
    阿狸的故事
    4月10日晚科目一练习(95分)
    复变函数自身运动的三个节点
    4月11日科目一练习(97分)
    4月10日科目一练习(92分)
    极限题(4.5)
  • 原文地址:https://www.cnblogs.com/luguo3000/p/3106036.html
Copyright © 2020-2023  润新知