静态类在使用一次后是否与内存中的静态变量一起保存,或者每次使用它时是否与每个变量一起实例化?
为了让它更真实,我们来创建一个例子 假设我想为我的系统制作一个不使用单例的语言词典 我的静态语言类有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"));
整个类和字典静态变量是否会留在内存中,直到我再次使用它,或者是否会再次创建它,并且每次我都会再次吃掉我的记忆?
答案 0 :(得分:2)
实际上静态变量存储在内存中的一个特定空间中,名为PermGen
,这个区域在您使用它们时会保存静态变量。如果你想再次使用它,它将从那个空间中获取它们而不再重新创建它们。
但是这个空间可能会在执行期间被填满,GC
将开始收集并从中删除一些引用,在这种情况下,如果您的变量被GC
删除并且您想要使用它将再次创建。
您可以阅读有关PermGen
的更多信息