我使用创建一个地图
new MapMaker().softValues().maximumSize(cacheSize).makeMap();
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常,但是,在服务器上部署并将新元素放入地图后,我有时会获得以下异常:
java.lang.IllegalStateException: Can't overwrite cause
at java.lang.Throwable.initCause(Throwable.java:320)
at org.jboss.mx.loading.RepositoryClassLoader.findClass(RepositoryClassLoader.java:624)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at org.jboss.mx.loading.RepositoryClassLoader.loadClassImpl(RepositoryClassLoader.java:474)
at org.jboss.mx.loading.RepositoryClassLoader.loadClass(RepositoryClassLoader.java:415)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at com.google.common.collect.CustomConcurrentHashMap$2.iterator(CustomConcurrentHashMap.java:828)
at java.util.AbstractCollection.remove(AbstractCollection.java:241)
at com.google.common.collect.CustomConcurrentHashMap$Segment.removeFromChain(CustomConcurrentHashMap.java:2599)
at com.google.common.collect.CustomConcurrentHashMap$Segment.processPendingCleanup(CustomConcurrentHashMap.java:2772)
at com.google.common.collect.CustomConcurrentHashMap$Segment.runLockedCleanup(CustomConcurrentHashMap.java:2860)
at com.google.common.collect.CustomConcurrentHashMap$Segment.preWriteCleanup(CustomConcurrentHashMap.java:2806)
at com.google.common.collect.CustomConcurrentHashMap$Segment.put(CustomConcurrentHashMap.java:2374)
at com.google.common.collect.CustomConcurrentHashMap.put(CustomConcurrentHashMap.java:3346)
at my.app.cache.CacheImplGoogleGuava.put(CacheImplGoogleGuava.java:36)
...
Run Code Online (Sandbox Code Playgroud)
可能是什么原因?
- - 更新:
JBoss版本是5.
在Throwable.initCause中设置断点,
并显示ClassNotFoundException消息:
Invalid use of destroyed classloader for com.google.common.collect.Iterators, UCL destroyed at:和Stacktrace
ClassNotFoundException(Throwable).initCause(Throwable):320
UnifiedClassLoader3(RepositoryClassLoader).findClass(String):628
...
UnifiedClassLoader3(ClassLoader).loadClass(String):248
CustomConcurrentHashMap$2.iterator():828
CustomConcurrentHashMap$2(AbstractCollection<E>).remove(Object):241
CustomConcurrentHashMap$Segment.enqueueCleanup(...):2738
CustomConcurrentHashMap$Segment.unsetValue(...):2662
CustomConcurrentHashMap<K, V>.reclaimValue(...)
CustomConcurrentHashMap$SoftValueReference<K, V>.finalizeReferent():1637
...
Method.invoke:574
Finalizer.claenUp:154
Finalizer.run:127
Run Code Online (Sandbox Code Playgroud)
从堆栈跟踪中,似乎地图中的对象最终确定无法加载finalizeReferent类中的对象com.google.common.collect.Iterators.
你的问题似乎与MapMaker一般的番石榴无关.
您只看到处理另一个异常时发生的异常(不幸的是).
Throwable.initCause()在调用当前已经为当前指定的原因Throwable(通过方法或构造函数`)时抛出异常.
该RepositoryClassLoader.findClass()方法似乎正在处理一些它期望没有原因的异常,但实际上它已经有一个原因集,它触发了这个异常.
不幸的是,你在这里看到的异常隐藏了实际的异常(这对于解决问题可能更为重要).
尝试Throwable.initCause()在第320行或RepositoryClassLoader.findClass()第624行(第624行)放置一个breakpoit 并重现问题(希望)在IDE的局部变量视图中看到"真实"异常.
| 归档时间: |
|
| 查看次数: |
5509 次 |
| 最近记录: |