0

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

为了让它更真实,让我们创建一个例子。
假设我想为我的系统制作一个不使用单例的语言词典。
我的静态语言类有 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"));  

整个类和字典静态变量会一直留在内存中,直到我再次使用它,还是会再次创建它,并且每次我这样做时都会再次占用我的内存?

4

1 回答 1

2

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

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

您可以阅读有关PermGen的更多信息

于 2014-03-09T18:35:22.947 回答