欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

J003_Java中存在内存泄漏吗?

程序员文章站 2022-04-19 16:07:01
...

一、内存泄漏

内存泄漏是指一个不再被使用的对象或变量占用的存储空间不能被回收或不能被及时回收。

二、容易引起内存泄漏的原因

  • 1/5_静态集合类
  • 2/5_各种连接
  • 3/5_监听器
  • 4/5_变量不合理的作用域
class Server{

    private String msg;

    public void receiveMsg() {
        msg = "Hello World!";
    }
    
}

注:
1)变msg为receiveMsg()的局部变量;
2)使用结束后显式执行msg = null;

  • 5/5_单例模式造成的内存泄漏
class BigClass {
    // class body
}

class Singleton {
    
    private BigClass bc;
    public static Singleton instance = new Singleton(new BigClass());
    
    private Singleton(BigClass bc) {
        this.bc = bc;
    }
    
    public Singleton getInstance() {
        return instance;
    }
        
}

注:
1)单例的实例是静态的,其生命周期存在于类的加载和销毁之间,是长生命周期对象;
2)new BigClass()创建的对象被Singleton的bc引用,Singleton的实例不销毁,其不会销毁,其为短生命周期对象;
3)短生命周期对象被长生命周期对象引用,此为不能被及时回收导致的内存泄漏;