私は授業でハードコードしたい巨大なヘルプテキストを用意しました。私たちは国ごとに異なる列挙型を持っていると言う、私は方法静的でないメソッドで定義された文字列値は、クラスオブジェクトでガベージコレクションされますか?
public interface HelpTextInterface {
public String getText(CountryEnum enum);
}
とサブクラスHelpTextAsiaEnglish、HelpTextEuropeEnglish、HelpTextAfricaEnglish、HelpTextAsiaHindiなど
public class HelpTextAsiaEnglish implements HelpTextInterface {
public String getText(CountryEnum country) {
switch(country) {
case CHINA:
return "large text about china in english";
case JAPAN:
return "large string about japan in english";
.....
.....
.....
}
}
}
を持つHelpTextInterfaceを作成することができます私は国に応じて適切なヘルプテキストプロバイダクラスを呼び出すことができますロケール。この方法では、すべてのテキストが同時にメモリに読み込まれるわけではありません。特定の国に属するクラスのみが読み込まれます。私の質問は、もしHelpTextInterface型の変数を再割り当てすると、メソッドの一部である文字列もガベージコレクトされるか、クラスオブジェクトと共にメモリから取り除かれますか?たとえば、
A. HelpTextInterface ht = new HelpTextAsiaEnglish();
B. ht.getText(CountryEnum.INDIA);
.........
C. ht = new HelpTextAfricaHindi();
質問1:すべてのアジアの国に属する英語の文字列は、ステップAまたはステップBでいつメモリにロードされますか。
クエリ2:すべてのアジアの国に属している英語の文字列は、ステップCの後に収集したゴミを取得しますHelpTextAsiaEnglish()オブジェクトがもはや参照されないように、混乱がクラスローダの周りにある、私はそれがクラスHelpTextAsiaEnglishをアンロードするかどうかわかりませんステップCの後であってもしなくてもよい。
質問3:私の目標は、一度に1つの文字列しかメモリにロードされないようにすることです。これらの文字列メンバ変数を作成するような方法があります。