在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();
如果这是一个问题,类装入器将永远不会被卸载