java中的内存泄漏问题
2016-06-28 08:24
246 查看
Java 是通过垃圾收集器(Garbage Collection GC)自动管理内存的回收 程序员不需要通过调用函数来释放内存 但它只能回收无用并且不再被其它对象引用的那些对象所占用的空间 GC 监控对象的运行状态 其中一种是采用可达测试 Reachability Test[1]检测对象是否从根可达 GC 回收对失去引用 从根不可达的对象但仍被引用 直接或间接被根引用 的对象不一定仍有用 对已无用对象的引用导致Java 内存泄漏。
在下面的代码中 循环申请 Object 对象 并将所申请的对象放入一个 Vector 中 如果仅仅释放对象本身 但是因为 Vector 仍然引用该对象 所以这个对象对 GC 来说是不可回收的 因此 如果对象加入到Vector 后 还必须从 Vector 中删除 最简单的方法就是将 Vector 对象设置为 null
此时 所有的 Object 对象都没有被释放 因为变量 v 引用这些对象 实际上无用 而还被引用的对象 GC 就无能为力了(事实上 GC 认为它还有用) 这一点是导致内存泄漏最重要的原因。
在下面的代码中 循环申请 Object 对象 并将所申请的对象放入一个 Vector 中 如果仅仅释放对象本身 但是因为 Vector 仍然引用该对象 所以这个对象对 GC 来说是不可回收的 因此 如果对象加入到Vector 后 还必须从 Vector 中删除 最简单的方法就是将 Vector 对象设置为 null
Vector v = new Vector(); for(int i =0; i <100 ; i++){ Object o = new Object(); v.add(o); o = null; }
此时 所有的 Object 对象都没有被释放 因为变量 v 引用这些对象 实际上无用 而还被引用的对象 GC 就无能为力了(事实上 GC 认为它还有用) 这一点是导致内存泄漏最重要的原因。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树