• 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,或者是不做任何操作,只会将对象相关的堆内存由垃圾回收器回收掉,物理资源仍然存在,直到程序退出。

    本人学识尚浅,欢迎交流。 倘若文章帮到了您,那真是好极了。
  • 相关阅读:
    基于Dubbo框架构建分布式服务(一)
    大型网站架构系列:消息队列
    Redis Cluster 分区实现原理
    Redis五种数据结构简介
    Java中创建对象的5种方式
    Netty 系列之 Netty 高性能之道
    Java 抽象类与接口
    谈iOS抓包:Mac下好用的HTTP/HTTPS抓包工具Charles
    Web系统大规模并发——电商秒杀与抢购
    [转]MS SQL Server 数据库连接字符串详解
  • 原文地址:https://www.cnblogs.com/luguo3000/p/3106036.html
Copyright © 2020-2023  润新知