Java JBoss 7.1.1最终版的类卸载?

Java JBoss 7.1.1最终版的类卸载?,java,jakarta-ee,classloader,Java,Jakarta Ee,Classloader,我遇到了以下情况: 我有一个单身汉: public class BookManager { private boplean initialized = false; private static BookManager instance; static { instance = new BookManager(); } public void init() { //Performs some initialization code


我遇到了以下情况:
我有一个单身汉:

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类被卸载了
当进行上述调用时,
该类被重新加载,但没有调用“init”方法

有人能解释GC在什么情况下收集类加载器吗

(为什么开始卸载该类?

我在中找不到有关卸载类的引用。但是,如果您查看JLS的章节,则只能在无法再访问类加载器时卸载类。这意味着必须首先取消部署应用程序。这是由JVM处理的,所以JBoss在这里不能做很多事情

话虽如此,JavaEE不支持将内容存储在静态变量中


你有什么例外<代码>空点异常?您可以附加一个调试器并检查
#init
#getAllBooks
方法中的
BookManager.class
的对象id。如果是相同的(我假设是相同的),则不会发生卸载。

是否重新部署应用程序?你在IDE中编码可能导致重新部署?据我所知,没有重新部署。嗨,谢谢你提供的信息。很难重现这个错误。我们有一些单例(不是单例bean,而是经典单例)。也许其中一种方法应该是转移到SingletonBean?我在评论中当然是指@singletonbean)
BookManager.getInstance().getAllBooks();