2 ctrlk ctrlk 于 2016.03.25 19:03 提问

java中io等非托管资源close与赋值为null有什么区别 10C

io操作如果没有close而直接赋值为null有什么后果,而close之后又没有赋值为null,也就是还有对象的引用,那这个对象会不会释放内存,垃圾回收器会不会回收它
Reader reader = new InputstreamReader(new FileInputStream()); 如果reader.close()关闭了reader的资源 则FileInputStream的资源有没有关闭 ,没关闭的话如何关闭

2个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.03.25 19:19

close()操作是关闭资源的作用,没close的话,如果另一个程序也要打开写,或读这个文件就会出问题。
close是为了释放系统资源。close操作不执行,可能会影响其他进行的操作,并没有什么大的后果。
java的对象,不置为null,也会被垃圾回收的,内存回收跟是否close操作无关。一般对象的作用域中,方法调用完成,对象空间会自动回收的。

StressedOut
StressedOut   2016.03.25 22:20

对象是否释放内存在于该对象是否还被引用,设置为null是为了让GC更快回收,不设置的话,会依据该引用变量的作用域执行回首。局部变量是在跳出该局部作用域后,实例变量是在退出该对象实例所在的作用域后回首,静态类变量永远不回收

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Java中的Connection赋值为null与conn.close
1.conn在close之前判断conn!=null更多的是出错保护的需要,防止初始化连接的时候已经出错导制conn未被赋值的情况。 2.conn不close直接置null只能释放内存,不会释放连接,会造成连接资源泄漏。 3.conn在close之后再设置 null是一个好习惯,可以避免已经关闭的连接再次被误用,还有就是一个连接被关闭两次的情况。
Java IO流关闭问题的深入研究
前几天看了一篇文章(见参考文章),自己动手试了下,发现有些不一样结论,作博客记录下,本文主要研究两个问题: 包装流的close方法是否会自动关闭被包装的流? 关闭流方法是否有顺序?
把list清空和赋值null对内存释放的区别
List<string> list=.... list.Clear(); list=null; 一般看法:list=null;能更快的释放内存, list.Clear();只是清空了内容 在内存上它还是占有空间,而=null 就是不占用内存空间 大佬看法:=null还没有立刻把内存清掉,要调用GC.Collect();才会清掉内存, Clear方法和=null差不多,也不会马上...
(转)Java变量初始化赋值null
原地址:http://www.cnblogs.com/znsongshu/p/6282672.html 在Java中,null值表示引用不指向任何对象。运行过程中系统发现使用了这样一个引用时·可以立即停止进一步的访问,不会给系统带来任何危险。 1.如果是对象的field的话那么系统在初始化对象的时候会把那些对象的值赋值为null,基本数据类型也有它们的初始值 2.如果是在方法
java中,只声明一个对象不赋值,与声明一个对象并赋为null,有啥区别?
转自:http://www.oschina.net/question/557858_127408 比如: public MainGame   mMainGame ; 与 public MainGame   mMainGame = null;这两句的区别? 编译的时候会不同,未赋值,直接使用编译时会报错。 不赋值就不会分配空间,赋值null会分配0大小的初始空间.
单例获取对象赋值后为null的现象
问题描述:         在项目开发过程中,我们建立许多的工具类,比如说:网络请求、图片加载,判断服务是否启动等。其调用方式最常用的有两种:1.直接使方法静态,这样就可以用类名.方法名直接调用。大家都知道,静态方法在一个项目中出现多次会影响项目的内存消耗,所以有好多人会选择第二种方式。2.方法不静态化,使用单例创建对象后,再调用方法。那么这个Bug就是在使用第2种方式调用方法的时候所造成的。
为什么部分IO流在调用Close()方法之前要先调用flush()方法
很多人可能一直比较纠结为什么有的带有缓冲功能的流在CLose()方法之前要先调用flush()方法 ,  我们先大概说一下带缓冲功能的流的原理   :   如果是需要频繁的对文件进行读或写  ,   普通流的速度会比较慢  ,   而缓冲流是在普通流的基础上多了一个缓冲区  ,   当读或写的数据达到一定量   ,    再自动往文件里进行读写  ,   如果没有装满缓冲区文件就已经读(写)完毕
需要close()的对象
java.io.*:Reader, Writer, InputStreamReader, OutputStreamWeiter, FileReader, FileWriter,BufferedReader, BufferedWriter, FileInputStream, FileOutputStream …… java.sql:Connection, Statement, R
java中的list为空(size==0)与list为null的区别
转自:大神的博客简述判断一个list集合是否为空,我们的惯性思维是判断list是否等于null即可,但是在Java中,list集合为空还是为null,这是两码事。引用举个形象的例子,我有一个空着的水杯(list),而你没有,那你是null,我的size为0。你想装水就需要自己去买个水杯(new ArrayList();),但是我就可以直接装水(list.add(水))。你要是没有杯子直接倒水,水就...
IO流初学flush和close的区别
import java.io.*; public class FileWriterDemo1 { /** * @param args */ public static void main(String[] args) throws IOException{ // TODO Auto-generated method stub //创建一个FileWriter对象,该对象一被初