使用StaticClass.staticValue后是否保留或处置静态类

时间:2014-03-09 18:28:42

标签: java memory-leaks static-class

静态类在使用一次后是否与内存中的静态变量一起保存,或者每次使用它时是否与每个变量一起实例化?

为了让它更真实,我们来创建一个例子 假设我想为我的系统制作一个不使用单例的语言词典 我的静态语言类有2个静态变量:

package server;  
import java.util.Locale;  
import java.util.ResourceBundle;  

public abstract class Language {  
    private static Locale language = new Locale("en", "GB");  
    public static ResourceBundle dictionary = ResourceBundle.getBundle("dictionary_"+Language.language, Language.language);  

    public static void changeLanguage(Locale language){  
        Language.language = language;  
        Language.dictionary = ResourceBundle.getBundle("dictionary_"+Language.language, Language.language);  
    }  
}  

当我在系统中使用它来获得如此的tekst值时:

System.out.println(Language.dictionary.getString("system.name"));  

整个类和字典静态变量是否会留在内存中,直到我再次使用它,或者是否会再次创建它,并且每次我都会再次吃掉我的记忆?

1 个答案:

答案 0 :(得分:2)

实际上静态变量存储在内存中的一个特定空间中,名为PermGen,这个区域在您使用它们时会保存静态变量。如果你想再次使用它,它将从那个空间中获取它们而不再重新创建它们。

但是这个空间可能会在执行期间被填满,GC将开始收集并从中删除一些引用,在这种情况下,如果您的变量被GC删除并且您想要使用它将再次创建。

您可以阅读有关PermGen

的更多信息