Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java web应用程序容器中使用scala singleton安全吗?_Java_Scala_Singleton - Fatal编程技术网

在java web应用程序容器中使用scala singleton安全吗?

在java web应用程序容器中使用scala singleton安全吗?,java,scala,singleton,Java,Scala,Singleton,我知道这样使用静态单例(见下面的代码)经常会导致内存泄漏 public class Singleton { private static Singleton instance = new Singleton(); public static Singleton getInstance() { return instance; } private Singleton() { } } 我不知道很多细节,但我在某个地方读到,静态变量包含指向

我知道这样使用静态单例(见下面的代码)经常会导致内存泄漏

public class Singleton {
    private static Singleton instance = new Singleton();

    public static Singleton getInstance() {
        return instance;
    }

    private Singleton() {
    }
}
我不知道很多细节,但我在某个地方读到,静态变量包含指向classloader的链接,这就是为什么它们通常不会被垃圾收集器删除

但是scala单例被转换成字节码中的静态变量。那么,在java web应用程序容器中使用scala单例对象安全吗

这样的静态单例(见下面的代码)通常会导致内存泄漏

public class Singleton {
    private static Singleton instance = new Singleton();

    public static Singleton getInstance() {
        return instance;
    }

    private Singleton() {
    }
}
没有特别的理由认为单例会导致内存泄漏

public class Singleton {
    private static Singleton instance = new Singleton();

    public static Singleton getInstance() {
        return instance;
    }

    private Singleton() {
    }
}
我会在Java中使用

enum Singleton { INSTANCE }
在斯卡拉

object Singleton { }
我读到静态变量包含指向类加载器的链接,这就是为什么垃圾收集器通常不删除它们

GC将清理循环引用的对象,因此没有理由这样做。每个对象、每个类都有一个指向加载它的类加载器的链接

ClassLoader cl = o.getClass().getClassLoader();
如果这是一个问题,类装入器将永远不会被卸载