Сохраняется или удаляется статический класс после использования StaticClass.staticValue

Сохраняется ли статический класс вместе со статическими переменными в памяти после его однократного использования, или он создается вместе с каждой переменной каждый раз, когда я его использую?

Чтобы сделать его более реальным, давайте создадим пример.
Допустим, я хочу создать языковой словарь для своей системы, не использующий синглтоны.
Мой статический языковой класс с двумя статическими переменными:

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"));  

Будет ли весь класс вместе со статической переменной словаря оставаться в памяти до тех пор, пока я не воспользуюсь им снова, или он будет создан снова и снова будет съедать мою память каждый раз, когда я это делаю?


person Ganu    schedule 09.03.2014    source источник
comment
Классы загружаются раз и навсегда при запуске JVM; они не перезагружаются второй раз. static final переменные совпадают. (несвязанный: взгляните на этот проект, он может вам помочь)   -  person fge    schedule 09.03.2014


Ответы (1)


Фактически статические переменные хранятся в определенном месте в памяти под названием PermGen, эта область содержит статические переменные, когда вы их использовали. и если вы захотите использовать его снова, он получит их из этого пространства без повторного создания.

Но это пространство может быть заполнено во время выполнения, здесь GC начнет собирать и удалять из него некоторые ссылки, в этом случае, если ваша переменная была удалена с помощью GC, и вы хотите использовать ее снова, она будет создана снова.

Вы можете узнать больше о PermGen

person Salah    schedule 09.03.2014
comment
PermGen, а не PerGen;) - person fge; 09.03.2014