当前位置: 代码迷 >> Android >> 研讨此段代码有无内存泄漏
  详细解决方案

研讨此段代码有无内存泄漏

热度:34   发布时间:2016-05-01 10:09:24.0
探讨此段代码有无内存泄漏

void abc() {

FileInputStream fin = new FileInputStream(strPathName);


}

------解决方案--------------------
必须close 否则你懂的 回收对象是空引用就被回收
这个引用空了 被回收了
但是打开的流 还是开启状态  必须手动close 
当我们在程序中创建一个IO流对象的时候,同时系统也会创建
一个叫做流的东西,在这种情况下,计算机内存中实际产生了两个事物,一个是java程
序中类的实例对象,一个是系统本身产生的某种资源,而java垃圾回收器只能管理程序
中类的实例对象,没办法去管理系统产生的资源,所以程序需要调用close方法,去通
知系统释放其自身产生的资源。

------解决方案--------------------
答案是:会泄露

FileInputStream fin 对象本身和里面所有成员变量等 都会释放, 这是针对JAVA类对象说的
GC管理的就是JAVA的对象

但是, FileInputStream是要打开文件的, 谁实现的呢?IoBridge类, open方法, 实际是jni调用,
所以, 不调用FileInputStream.close()的话, 尽管JAVA对象都被GC了,但是fd文件描述符(native层)不会主动释放,造成内存泄露(打开文件必然占内存)
  相关解决方案