2013-02-11 12 views
5

Sto utilizzando H2 DB in modalità memoria per elaborare alcuni dati. La mia applicazione java deve mantenere attiva la JVM mentre si rilascia e ricrea, o troncando o rilasciando tutti gli oggetti in H2 DB in ogni esecuzione. Pertanto ho bisogno di utilizzare l'opzione 'DB_CLOSE_DELAY = -1' nell'URL del DB.H2 DB in memoria Pulire la RAM

Per pulire la memoria dopo un'iterazione, ho provato a utilizzare "DROP ALL OGJECTS", "DROP ALL OGGETTI ELIMINA FILE" e ha troncato ciascuna tabella una alla volta. Tutti questi hanno raggiunto ciò che volevo, non cancellando la memoria che era attualmente occupata da esso. Le dimensioni del mio database variano da circa 300 MB a 2 GB. Pertanto, dopo una singola iterazione, la mia RAM occupa circa 1 GB di spazio occupato e non è stata trovata alcuna soluzione su quale sia la causa di questa o della risoluzione.

Un po 'simile a questo Clear the in memory database after every testcase. Ma senza dbUnit e bisogno di cancellare anche la RAM.

È possibile eseguire questa operazione senza arrestare la JVM.

Grazie.

+1

È possibile eseguire l'istruzione 'shutdown'. Questo chiuderà la connessione e il database. –

+0

Grazie ha funzionato. Questo è quello che stavo cercando. – Akalanka

+0

OK, ho aggiunto il commento come risposta ora. –

risposta

4

È possibile eseguire la dichiarazione shutdown. Questo chiuderà la connessione e il database.

+0

Ciao, ci scusiamo per il disturbo. Ma la soluzione ha funzionato poche volte quando ho provato. Ma a volte non funziona. Il mio processo java java.exe mostra di aver occupato 1,1 GB durante l'esecuzione. Dopo che il comando shutdown è stato eseguito, è stato ridotto a circa 80 MB, il che corrisponde alla media del mio programma. Ma vedo che nel task manager di Windows, anche se il processo che usa la memoria è stato ridotto, la mia memoria fisica non è stata liberata. Ha liberato circa 1,1 GB solo dopo che ho terminato manualmente il processo java.exe che stava usando. – Akalanka

+0

Ho provato questo poche volte utilizzando SPEGNIMENTO, COMPATTO DI SPEGNIMENTO, SPEGNERE IMMEDIATAMENTE E GOCCARE TUTTI GLI OGGETTI con la combinazione con ciascuno precedente. Ma il risultato è sempre lo stesso e talvolta anche il processo java.exe non riduce la memoria. Mantiene memoria allocata di 1,1 GB così com'è. Ti sei mai imbattuto in questo o sto facendo qualcosa di sbagliato. Per favore aiuto. – Akalanka

+0

Come hai misurato l'utilizzo della memoria? Java non restituisce memoria heap inutilizzata al sistema operativo. Ma mi chiedo se questo sia davvero un problema per te. –