2 votes

java bloque la mémoire

J'ai un programme java qui utilise un hashmap faible pour mettre en cache certaines choses. Si java a besoin de plus de mémoire, le hashmap faible est effacé. Cela fonctionne bien pour moi. Maintenant, j'ai aussi un programme c# sur le même ordinateur qui fonctionne et qui a reconnu ce qui suit.

Lorsque le programme java est en cours d'exécution, mon programme c# ne s'exécute pas correctement à des moments où l'ordinateur est très sollicité. D'autre part, mon programme c# s'exécute également très bien lorsque le programme java ne fonctionne pas.

Se pourrait-il que mon programme java bloque la mémoire que mon programme c# pourrait utiliser ? Comment puis-je le découvrir ?

2voto

djna Points 34761

Votre programme Java va étendre son tas à une taille donnée. La collecte d'ordures libérera les objets en les renvoyant dans l'espace libre du tas, mais ne réduira pas la mémoire globale utilisée par le programme Java.

Utilisez les capacités de votre système d'exploitation pour étudier la mémoire consommée par les applications C++ et Java.

Vous pouvez utiliser les options de la ligne de commande de votre JVM pour contrôler la taille maximale du tas pour Java, et donc limiter sa consommation. Bien sûr, si vous besoin de un tas énorme, il est possible que tout ne tienne pas sur une seule machine.

2voto

serg10 Points 10157

Vous ne pouvez pas définir une limite maximale pour le tas de votre CLR .net de la même manière que pour le tas de votre JVM. Voir cette question pour plus d'informations. Le CLR tentera simplement d'étendre son tas jusqu'à ce qu'il atteigne la limite de mémoire de processus imposée par votre système d'exploitation, ou que la mémoire libre de votre machine soit épuisée.

Donc oui, lorsque vous augmentez la taille du tas de votre JVM, vous pouvez réserver la mémoire que votre CLR utiliserait autrement. La JVM commencera à la limite inférieure et s'étendra à la limite supérieure si nécessaire. Comme mentionné ci-dessus, cette mémoire n'est pas libérée en dehors de la JVM - elle n'est pas mise à la disposition du CLR .net.

Vous devrez cependant effectuer un contrôle plus poussé pour vérifier si la mémoire est vraiment à l'origine du problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X