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