将共享公共库来解决my“;java.lang.OutOfMemoryError:Metaspace”;?

将共享公共库来解决my“;java.lang.OutOfMemoryError:Metaspace”;?,java,jboss,wildfly,Java,Jboss,Wildfly,我有几个。war共享大约80%的公共依赖项。 我注意到,在启动jboss(我使用的是wildfly 12)时,如果.war数增加到4或更多,就会出现上述错误 我认为这是因为每个.war单独加载了很多类,所以,如果我创建了一个包含公共.jar的模块,会发生什么? 由于隔离,什么也做不到,或者,可能个别类加载器会从jboss类加载器获取公共依赖项,从而解决我的问题 我不认为提高默认的MaxMetaspace JVM参数可以解决这个问题,因为我预计战争的数量会随着时间的推移而稳步增长,从我对metas

我有几个。war共享大约80%的公共依赖项。 我注意到,在启动jboss(我使用的是wildfly 12)时,如果.war数增加到4或更多,就会出现上述错误

我认为这是因为每个.war单独加载了很多类,所以,如果我创建了一个包含公共.jar的模块,会发生什么? 由于隔离,什么也做不到,或者,可能个别类加载器会从jboss类加载器获取公共依赖项,从而解决我的问题


我不认为提高默认的MaxMetaspace JVM参数可以解决这个问题,因为我预计战争的数量会随着时间的推移而稳步增长,从我对metaspace的理解来看,这个空间不像堆那样被垃圾收集,对吗?

添加更多战争需要从所有方面获得更多资源,所以说“增加元空间只会延迟这个问题”没有多大意义。无论元空间是什么,您的服务器在任何情况下都不支持无限战争。元空间也是GC'd的,但是如果没有什么可收集的,那也没有多大帮助。我不是说你不应该创建一个共享模块,我是说它不是你的问题所显示的最后也是唯一的选择。元空间不包含静态对象和像旧permegen这样的东西吗?它怎么能被垃圾收集?不管怎么说,问题是共享公共库会有什么帮助,或者除了.wars的大小之外没有任何好处。如果你想知道metaspace gc的细节,你可以自己做研究。增加元空间将是我的第一个方法,因为这是最少的努力和保证的结果。当这条路耗尽时,我会考虑其他选择。但是做你想做的,先把事实弄清楚。说“metaspace不是gc'd”的人根本没有资格配置内存设置。