J'ai écrit ce programme de test.
Simple programme CLI Java continue à manger de plus en plus de mémoire
import java.io.Console;
public class ConsoleTest{
public static void main(String[] args) {
// TODO Auto-generated method stub
Console console = System.console();
System.out.println("ConsoleTest initialising... \n Enter command : ");
String line = "";
if(console!=null){
while ((line = console.readLine())!= null){
System.gc();
System.out.println("your input : " + line);
if("exit".equalsIgnoreCase(line)){
System.out.println("Bye ~");
System.exit(0);
}else{
System.out.println("Enter command : ");
}
}
}else{
System.out.println("No console found");
}
}
}
je vis l'utilisation de la mémoire tas constamment en remontant même pendant que je rédigeais cette question, ne faisant rien au programme.
Aussi, chaque fois que je clique sur le bouton Exécuter GC, le gestionnaire de tâches Windows montre que le programme utilise un peu plus de mémoire.
Y at-il un problème avec le code? ou est-ce un comportement normal?
EDIT
Plus tard, je trouve que le graphe d'utilisation du tas de mémoire a oscillé régulièrement sur une échelle de temps plus longue.
Je ne sais pas pourquoi ça fait ça mais c'est une autre affaire je suppose.
Si je pouvais demander une chose de plus, j'ai vu une énorme différence entre l'utilisation du tas dans Java Monitor et l'utilisation de la mémoire affichée dans le gestionnaire de tâches Windows.
L'utilisation du tas dans Java Monitor a montré environ 300 Mo pour le processus Eclipse.
Dans Windows taskmanager, 900 Mo - ish.
Est-ce la différence, car l'utilisation du tas n'incluait pas l'utilisation de la mémoire de la pile?
accordé, que la quantité de mémoire dont je parle est négligeable.Cependant, pourquoi utilise-t-il plus de mémoire? Même pendant que je ne demandais pas au MV de faire GC. Bien sûr, si la VM fait réellement GC ou non est à la pensée de la VM. – Ascendant
Pas moyen de le dire sans plus de détails. Peut-être en profite-t-il pour déplacer des articles dans PermGen et laisser le reste du tas de la même taille. – chrylis