内存泄漏可能由哪些原因导致呢?
比如说:
①、静态的集合中添加的对象越来越多,但却没有及时清理;
public class OOM {
static List list = new ArrayList();
public void oomTests(){
Object obj = new Object();
list.add(obj);
}
}
②、单例模式下对象持有的外部引用无法及时释放;
③、数据库、IO、Socket 等连接资源没有及时关闭;
try {
Connection conn = null;
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("url", "", "");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("....");
} catch (Exception e) {
}finally {
//不关闭连接
}
④、变量的作用域不合理;
class Simple {
Object object;
public void method1(){
object = new Object();
//...其他代码
//由于作用域原因,method1执行完成之后,object 对象所分配的内存不会马上释放
}
}
⑤、hash 值发生变化但对象却没有改变,这也是为什么 String 被设计成不可变对象的原因之一,就是因为假如 String 的哈希值发生了改变,但对应的值没变,就导致 HashMap 中的对象无法被及时清理;
⑥、使用完 ThreadLocal 没有使用 remove 方法来进行清除。

THE END
暂无评论内容