我有一個有趣的問題 - 如果我的應用程序運行了很長時間(> 20h),那麼有時會得到NoClassDefFound錯誤 - 看起來像JVM認爲該類不會成爲無論如何,GCd它。如果應用程序運行很長時間,則缺少類
要成爲一個更具體一點,下面是一個例子情況:
object ErrorHandler extends PartialFunction[Throwable,Unit] {
def isDefinedAt(t: Throwable) = true
def apply(e: Throwable) =e match {
// ... handle errors
}
}
// somewhere else in the code...
try {
// ... long running code, can take more than 20 hours to complete
} catch (ErrorHandler)
而且我得到以下異常:
Exception in thread "main" java.lang.NoClassDefFoundError: org/rogach/avalanche/ErrorHandler$
如果嘗試少量的時間/ catch塊運行,一切按預期工作。
如果有人有興趣,這裏是有問題的代碼庫:Avalanche
我需要注意的是我看到了這一點,類似的問題只能在Cent OS 5
機,使用JRE 6u26和Scala 2.9.1/2.9.2。
這個問題的原因是什麼?
嘗試用'-XX:-TraceClassUnloading'運行它。結果是什麼? http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html – ron
@龍 - 我現在正在嘗試,但它會需要一些時間:)和日誌文件是相當長的和冗長,爲什麼我應該grep它來獲得跟蹤輸出? – Rogach
不能猜到被蒙上眼睛,但嫌疑人的類名肯定是候選人:) – ron