2013-02-11 4 views
5

J'utilise H2 DB en mode mémoire pour traiter certaines données. Mon application Java doit garder la JVM allumée lors de la suppression et de la recréation ou de la troncature ou de la suppression de tous les objets dans H2 DB dans chaque exécution. Par conséquent, j'ai besoin d'utiliser l'option 'DB_CLOSE_DELAY = -1' dans l'URL DB.H2 DB en mémoire Nettoyer la RAM

Pour nettoyer la mémoire après une itération, j'ai essayé d'utiliser 'DROP ALL OBJECTS', 'DROP ALL OBJECTS DELETE FICHIERS' et tronqué chaque table une par une. Tous ceux-ci réalisé ce que je voulais n'a pas supprimé la mémoire qui était actuellement occupé par elle. La taille de ma base de données varie d'environ 300 Mo à 2 Go. Par conséquent, après une seule itération, ma mémoire vive occupe environ 1 Go et n'a trouvé aucune solution quant à la cause de cette situation ou de la résolution.

Un peu similaire à Clear the in memory database after every testcase. Mais sans le dbUnit et besoin d'effacer la RAM aussi.

Est-il possible de le faire sans arrêter la JVM.

Merci.

+1

Vous pouvez exécuter l'instruction 'shutdown'. Cela fermera la connexion et la base de données. –

+0

Merci cela a fonctionné. C'est ce que je cherchais. – Akalanka

+0

OK, j'ai ajouté le commentaire comme réponse maintenant. –

Répondre

4

Vous pouvez exécuter l'instruction shutdown. Cela fermera la connexion et la base de données.

+0

Bonjour, Désolé pour troubler. Mais la solution a fonctionné peu de fois quand j'ai essayé. Mais ça ne marche pas parfois. Mon processus Java java.exe montre avoir occupé 1,1 Go lors de l'exécution. Après que la commande shutdown a été exécutée, elle a été réduite à environ 80 Mo, ce qui correspond à peu près à la moyenne de mon programme. Mais je vois que dans le gestionnaire de tâches de Windows, bien que le processus utilisant la mémoire ait été réduit, ma mémoire physique n'a pas été libérée. Il libéré environ 1,1 Go seulement après que je termine manuellement le processus java.exe qui utilisait. – Akalanka

+0

J'ai essayé cela plusieurs fois en utilisant SHUTDOWN, SHUTDOWN COMPACT, SHUTDOWN IMMEDIATELY et BAISSE TOUS LES OBJETS avec combinaison avec chacun des précédents. Mais le résultat est toujours le même et parfois le processus java.exe ne réduit pas la mémoire aussi bien. Il conserve la mémoire allouée de 1,1 Go tel quel. Avez-vous déjà rencontré cela ou suis-je en train de faire quelque chose de mal? S'il vous plaît aider. – Akalanka

+0

Comment avez-vous mesuré l'utilisation de la mémoire? Java ne retourne pas la mémoire de tas inutilisée au système d'exploitation. Mais je me demande si c'est vraiment un problème pour vous. –