在Eclipse中停止Tomcat 10时出现ClassCastException

3vpjnl9f  于 2022-11-04  发布在  Eclipse
关注(0)|答案(1)|浏览(946)

我使用的是Eclipse 2022-06和Tomcat 10.0.10。
通常,在关闭Eclipse中运行的Tomcat时,我会得到

WARNUNG: Failed to clear soft references from ObjectStreamClass$Caches for web application [ROOT]
java.lang.ClassCastException: class java.io.ObjectStreamClass$Caches$1 cannot be cast to class java.util.Map (java.io.ObjectStreamClass$Caches$1 and java.util.Map are in module java.base of loader 'bootstrap')
    at org.apache.catalina.loader.WebappClassLoaderBase.clearCache(WebappClassLoaderBase.java:2363)

...
我发现了this问题,但它并不真正适用:这是一个不同的类(Map而不是String),我找不到一个名为“SESSIONS.ser”的文件。我也已经从实际的Web服务部分中删除了所有内容(所以代码什么也没做)。我只是还没有开始删除所有链接的jar文件,这些文件可能是自动加载的。
有没有办法找出真正导致问题的类?
顺便说一下,如果通过将WAR文件部署到Eclipse外部的Tomcat安装中,我无法在日志中重现错误。我不确定这是否意味着它没有出现。

vlf7wbxs

vlf7wbxs1#

我在升级IDE后遇到了同样的问题。
在比较两个tomcat日志后,我发现使用了两个不同的jvm。事实上,我已经升级了jdk和ide!
这个问题出现在jvm11.0.16上,即使在最新的ide版本上,jvm11.0.11也不例外。
这是解释,但是由保留旧jvm组成的解决方案可能不是很好...
所以我升级了Tomcat到最新版本(在我的例子中是8.5.82),它解决了这个问题。我猜这是由于这个特性(参见tomcat changelog):
在包含基础内存泄漏修复程序的JRE上运行时,禁用由上下文属性clearReferencesObjectStreamClassCaches启用的内存泄漏更正代码。(markt)

相关问题