gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:06:03 26 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

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

关于java - 使用 StaticClass.staticValue 后是否保留或处置静态类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22286249/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com