Ho un problema divertente: se la mia applicazione viene eseguita per un lungo periodo (> 20h), a volte viene visualizzato errore NoClassDefFound - sembra che JVM abbia deciso che la classe non verrà usato comunque e GCd esso.Classi mancanti se l'applicazione viene eseguita a lungo
Per essere un po 'più specifico, ecco un esempio di caso:
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)
e ottengo la seguente eccezione:
Exception in thread "main" java.lang.NoClassDefFoundError: org/rogach/avalanche/ErrorHandler$
Se quella prova/piste blocco catch per piccole quantità di tempo, tutto funziona come previsto.
Se qualcuno è interessato, qui è la base di codice in questione: Avalanche
ho bisogno di sottolineare che ho visto questo e problemi simili solo su Cent OS 5
macchine, utilizzando JRE 6u26 e Scala 2.9.1/2.9.2.
Quale potrebbe essere la causa di questo problema?
Provare a eseguirlo con '-XX: -TraceClassUnloading'. Quali sono i risultati? http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html – ron
@ron - Ci sto provando in questo momento, ma ci vorrà del tempo :) E il file di registro è piuttosto lungo e verboso, per quali parole dovrei grep per ottenere l'output di tracciamento? – Rogach
non si può indovinare con gli occhi bendati, ma il nome della classe sotto sospetto è un candidato sicuro :) – ron