Programmation Java/Paramétrer la JVM
La machine virtuelle Java désigne l'environnement d'exécution d'un programme Java. Il est possible d'adapter cet environnement suivant les besoins : utilisation de la mémoire, configuration du réseau, etc.
Il existe deux possibilités de paramétrage de cet environnement :
- au moment du lancement du programme Java (et de la JVM) ;
- au cours de l'exécution d'un programme Java.
L'action de paramétrer la machine virtuelle représente le changement d'état d'un paramètre système. Dans un premier temps, les paramètres les plus utilisés sont listés. Ensuite, les deux possibilités de paramétrage sont exposées.
Liste des paramètres de la machine virtuelle Java (JVM)
modifierBeaucoup de paramètres et options sont liés au fonctionnement interne de la JVM : réseau, mémoire (ramasse-miette), ... En cas de doute, utilisez les valeurs par défaut.
Paramètres de lancement d'application
modifierImage de démarrage (Splash screen)
modifierDurant le lancement d'une application Java, il est possible de spécifier à la JVM d'afficher une image d'attente (comme lors du lancement d'Eclipse par exemple) en utilisant l'option -splash
.
-splash:<chemin_de_l_image>
L'image doit se situer dans le système de fichiers (elle ne peut pas être dans un JAR), et utiliser l'un des formats supportés : PNG, GIF, JPEG, BMP.
Pour une application dans une archive JAR, il est possible d'afficher une image de splash screen en utilisant le paramètre SplashScreen-Image
dans le fichier manifest.
L'application peut récupérer la fenêtre affichant l'image (pour y ajouter une barre de progression ou une animation par exemple) en utilisant la méthode getSplashScreen()
de la classe java.awt.SplashScreen
[1] retournant l'instance de cette classe créée par la JVM.
La fenêtre de splash screen est automatiquement fermée quand l'application affiche sa première fenêtre d'interface graphique.
Paramètres du proxy
modifierNom du paramètre[2] | Description |
---|---|
http.proxyHost
|
Nom du serveur proxy |
http.proxyPort
|
Port du proxy (valeur par défaut:80) |
http.nonProxyHosts
|
Liste des hôtes qui doivent être accédés directement, sans passer par le proxy. Il s'agît d'une liste d'expressions régulières séparées par '|'. Tous les hôtes correspondant à l'une de ces expressions seront accédés par une connexion directe sans passer par le proxy |
http.proxyUser
|
Nom d'utilisateur utilisé pour le proxy |
http.proxyPassword
|
Mot de passe utilisateur utilisé pour le proxy |
Paramètres de la mémoire
modifierLa mémoire utilisée pour l'allocation dynamique des objets est appelée le tas (heap en anglais), paramétrable avec les options commençant par -Xm
.
Le paramétrage de la mémoire se fait au lancement d'un programme Java grâce aux options du tableau ci-dessous.
Nom du paramètre | Description |
---|---|
-Xms
|
Taille initiale du tas (Memory Start) |
-Xmx
|
Taille maximale du tas (Memory maX) |
-Xmn
|
Taille du tas (Memory Nursery) pour les objets ayant un cycle de vie court.
Le tas de jeune génération (Young generation) est celui où les objets sont créés. Le ramasse-miette (garbage collector) passe plus souvent dans ce tas pour libérer les objets qui ne sont plus utilisés. Tout objet s'y trouvant durant 2 ou 3 cycles du ramasse-miette est déplacé vers le tas des objets plus anciens (Old generation). |
-Xss
|
Taille de la pile (Stack Size) pour chaque processus léger (thread).
La pile est la zone mémoire où les arguments et variables locales sont empilées durant l'appel à une méthode.
Une taille insuffisante peut aboutir à une exception de classe |
Exemple pour lancer un programme Java en allouant 256 Mo :
java -Xms256M -Xmx256M monProgrammeJava
Modification d'un paramètre de la JVM
modifierAu lancement d'un programme Java, il est possible de positionner un ou plusieurs paramètres système de la manière suivante :
$ java -D<nom du paramètre1>=<valeur du paramètre1> -D<nom du paramètre2>=<valeur du paramètre2> monProgrammeJava
Exemple pour positionner le proxy à utiliser :
$ java -Dhttp.proxyHost=monproxy -Dhttp.proxyPort=3128 monProgrammeJava
- dans cet exemple, le proxy utilisé sera l'hôte "monproxy" sur le port 3128
Au sein d'un programme Java, il est possible de changer l'état d'un paramètre système de la manière suivante :
System.getProperties().put("http.proxyHost", "monproxy");
System.getProperties().put("http.proxyPort", "3128");
System.getProperties().put("http.proxyUser", "toto");
System.getProperties().put("http.proxyPassword", "totoisback");
- dans cet exemple, le proxy utilisé sera l'hôte "monproxy" sur le port 3128 en utilisant comme utilisateur "toto"