次のケースに遭遇しました:
シングルトンがあります:
public class BookManager {
private boplean initialized = false;
private static BookManager instance;
static {
instance = new BookManager();
}
public void init() {
//Performs some initialization code
initialized = true;
}
public List<Book> getAllBooks() {
if (!initialized) {
throw new Exception("Not initialized!");
}
//do some code to get the books list and return it
}
}
シングルトンが初期化され、アプリケーションの初期化中に init メソッドが呼び出され、正常に機能します。
しばらくしてから (理由は不明) - 例外がスローされるユース ケースは、次のコードにあります。
BookManager.getInstance().getAllBooks();
アプリケーションの起動時に "init" メソッドが呼び出されたことは確か
なので、BookManager クラスがアンロードされたのではないかと考えられます。
上記の呼び出しが行われたとき
、クラスはリロードされましたが、「init」メソッドへの呼び出しは行われませんでした。
クラスローダーが GC によって収集されているケースを誰かが説明できますか?
(なぜクラスがアンロードされ始めたのですか?)