Java suppone che non abbia perdite di memoria ma è ancora possibile. Quando il mio programma ha perdite di memoria, posso ripararlo (spero). Ma quando alcuni pacchetti di terze parti ce l'hanno, cosa posso fare? Praticamente nulla, tranne non usare questo pacchetto.Sandbox per memoria
C'è un'altra soluzione? Mi piace l'idea di sandbox. Sei autorizzato a fare tutto ciò che vuoi all'interno di una determinata area e tu "fisico" non hai la possibilità di disturbare altri fuori dalla tua scatola. C'è un modo per creare tale sandbox per l'utilizzo della memoria in Java? Immagina di creare sandbox per l'utilizzo della memoria, consentire a qualche pacchetto di fare quello che fa, ottenere risultati ed eliminare questa sandbox con tutto il resto della spazzatura qui! Nessuna complicanza con GC, nessuna pulizia o disposizione della memoria. Basta cancellare e dimenticarsene.
C'è un modo per farlo?
Questo è buona idea, ma un po 'costoso. Potete immaginare di iniziare una nuova JVM per ogni richiesta di database? Una volta ero in conferenza JavaOne sulla presentazione di Plumbr "Scommetto che hai una perdita di memoria" e un paio dei loro esempi riguardavano la perdita di memoria nei driver di database standard. Era MySql se non mi sbaglio. –
È possibile utilizzare ClassLoaders per isolare le classi problema. Quindi per ripulire la memoria utilizzata dalla libreria è sufficiente rimuovere tutti i riferimenti alle sue classi e al loader. Puoi anche usare un ThreadGroup separato per isolare i thread delle librerie, permettendoti di eliminarli facilmente. –
@IzoldTytykalo: è possibile utilizzare una JVM per 2 richieste database :) o altro. – ZhongYu