首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

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

2013-08-04 
探讨此段代码有无内存泄漏void abc() {FileInputStream fin new FileInputStream(strPathName)}[解决办

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


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层)不会主动释放,造成内存泄露(打开文件必然占内存)

热点排行