27 votes

comment augmenter la mémoire du tas de java de façon permanente ?

J'ai un problème avec la mémoire du tas de java. J'ai développé une application client-serveur en java qui est exécutée en tant que service Windows et qui nécessite plus de 512 Mo de mémoire. J'ai 2 Go de RAM, mais lorsque je lance mon application, une exception se produit.

Erreur de mémoire insuffisante : espace de tas de java

mais j'ai déjà défini la taille du tas (512 Mo maximum) dans le panneau de configuration de java et j'obtiens toujours la même erreur. Je ne peux pas définir la taille du tas par la ligne de commande car mon application s'exécute en tant que service Windows. Comment puis-je augmenter la taille du tas par défaut ?

43voto

George D Points 743

La machine virtuelle Java prend deux arguments de ligne de commande qui définissent les tailles initiale et maximale du tas : -Xms et -Xmx. Vous pouvez ajouter une variable d'environnement système nommée _JAVA_OPTIONS, et y définir les valeurs de la taille du tas.
Par exemple, si vous voulez une taille de tas initiale de 512 Mo et maximale de 1024 Mo, vous pouvez utiliser :

sous Windows :

SET _JAVA_OPTIONS = -Xms512m -Xmx1024m

sous Linux :

export _JAVA_OPTIONS="-Xms512m -Xmx1024m"

Il est possible de lire la taille par défaut du tas de la JVM de manière programmatique en utilisant la méthode totalMemory() de la classe Runtime. Utilisez le code suivant pour lire la taille du tas de la JVM.

public class GetHeapSize {
    public static void main(String[]args){

        //Get the jvm heap size.
        long heapSize = Runtime.getRuntime().totalMemory();

        //Print the jvm heap size.
        System.out.println("Heap Size = " + heapSize);
    }
}

5voto

Justin Chitla Points 381

Cela a marché pour moi :

export _JAVA_OPTIONS="-Xmx1g"

Il est important que vous n'ayez pas d'espaces car pour moi cela n'a pas fonctionné. Je vous suggère de faire un simple copier-coller. Puis j'ai couru :

java -XshowSettings:vm

et il vous le dira :

Récupéré _JAVA_OPTIONS : -Xmx1g

3voto

Jan Hruby Points 584

Si vous avez besoin d'augmenter la mémoire réservée, il existe des paramètres VM -Xms et -Xmx, à utiliser par exemple : -Xms512m -Xmx512m . Il existe également le paramètre -XX:MaxPermSize=256m qui modifie la mémoire réservée pour la génération permanente.

Si votre application s'exécute en tant que service Windows, dans Panneaux de configuration -> Outils d'administration -> Services, vous pouvez ajouter certains paramètres d'exécution à votre service.

1voto

Debolek Points 46

Vous pouvez également l'utiliser ci-dessous pour étendre la mémoire

export _JAVA_OPTIONS="-Xms512m -Xmx1024m -Xss512m -XX:MaxPermSize=1024m"

Xmx spécifie le pool d'allocation de mémoire maximum pour une machine virtuelle Java (JVM)

Xms spécifie le pool d'allocation de mémoire initial.

Xss réglage de la taille de la mémoire de la pile de threads

XX:MaxPermSize : la taille maximale de la génération permanente

-4voto

P-H Points 167

Veuillez noter que l'augmentation de la taille du tas de Java à la suite d'une modification de l'application java.lang.OutOfMemoryError : Espace de tas de Java n'est bien souvent qu'une solution à court terme.

Cela signifie que même si vous augmentez la taille par défaut du tas de Java de 512 Mo à, disons, 2048 Mo, vous risquez d'obtenir cette erreur à un moment donné si vous avez affaire à une fuite de mémoire. La principale question à se poser est de savoir pourquoi vous obtenez cette erreur OOM en premier lieu ? S'agit-il vraiment d'une valeur Xmx trop faible ou simplement d'un symptôme d'un autre problème ?

Lors du développement d'une application Java, il est toujours crucial de comprendre dès le début ses besoins en termes d'empreinte mémoire statique et dynamique, ce qui permettra d'éviter des problèmes complexes d'OOM par la suite. Le dimensionnement correct des paramètres Xms et Xmx de la JVM peut être réalisé par le biais d'un profilage et de tests de charge appropriés de l'application.

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