{"version":"1.1","schema_version":"1.1.0","plugin_version":"1.1.2","url":"https://ipom.fr/2019/06/11/la-seule-et-unique-raison-de-personnaliser-les-parametres-de-memoire-dintellij-idea/","llm_html_url":"https://ipom.fr/2019/06/11/la-seule-et-unique-raison-de-personnaliser-les-parametres-de-memoire-dintellij-idea/llm","llm_json_url":"https://ipom.fr/2019/06/11/la-seule-et-unique-raison-de-personnaliser-les-parametres-de-memoire-dintellij-idea/llm.json","manifest_url":"https://ipom.fr/llm-endpoints-manifest.json","language":"fr-FR","locale":"fr_FR","title":"La seule et unique raison de personnaliser les paramètres de mémoire d&#39;IntelliJ IDEA","site":{"name":"iPom","url":"https://ipom.fr/"},"author":{"id":1,"name":"Maximus63","url":"https://ipom.fr/author/maximus/"},"published_at":"2019-06-11T20:11:29+00:00","modified_at":"2019-06-11T20:11:29+00:00","word_count":1762,"reading_time_seconds":529,"summary":"Ne soyez pas un Scrooge et donnez à votre IDE un peu plus de mémoire Hier, nous avons discuté de la personnalisation des paramètres de mémoire dans IntelliJ IDEA. Il est apparu que certaines personnes ne le faisaient pas, certaines personnes (comme moi) utilisaient un simple jeu de modifications et certains développeurs élaboraient une configuration [&hellip;]","summary_points":["Ne soyez pas un Scrooge et donnez à votre IDE un peu plus de mémoire\nHier, nous avons discuté de la personnalisation des paramètres de mémoire dans IntelliJ IDEA.","Il est apparu que certaines personnes ne le faisaient pas, certaines personnes (comme moi) utilisaient un simple jeu de modifications et certains développeurs élaboraient une configuration sophistiquée et sophistiquée qui répondait à leurs besoins.","Alors que je travaillais pour un projet en cours, j’ai dû faire face à plusieurs petits projets de microservices et à un projet plus ancien, l’une des activités principales du client.","Et après avoir appliqué certains changements, j&#39;ai constaté une nette amélioration en termes de rapidité et de réactivité de l&#39;IDE."],"topics":["Apple"],"entities":[],"entities_metadata":[{"id":9,"name":"Apple","slug":"apple","taxonomy":"category","count":6020,"url":"https://ipom.fr/category/apple/"}],"tags":["Apple"],"content_hash":"23a0802d6ab45ad5f69392acc89a29b8","plain_text":"Ne soyez pas un Scrooge et donnez à votre IDE un peu plus de mémoire\nHier, nous avons discuté de la personnalisation des paramètres de mémoire dans IntelliJ IDEA. Il est apparu que certaines personnes ne le faisaient pas, certaines personnes (comme moi) utilisaient un simple jeu de modifications et certains développeurs élaboraient une configuration sophistiquée et sophistiquée qui répondait à leurs besoins. Alors que je travaillais pour un projet en cours, j’ai dû faire face à plusieurs petits projets de microservices et à un projet plus ancien, l’une des activités principales du client. Et après avoir appliqué certains changements, j&#39;ai constaté une nette amélioration en termes de rapidité et de réactivité de l&#39;IDE. Mais à cette époque, je ne mesurais pas ce qui avait changé exactement, c’était seulement une observation subjective que “IDEA est maintenant plus rapide”.\nMais au cours de cette discussion, un des développeurs travaillant pour le même client (merci Yuri) m&#39;a envoyé ses paramètres et j&#39;ai été vraiment dépassé par leur niveau de complexité. J&#39;étais heureux avec ma propre configuration, mais j&#39;étais également curieux de savoir comment ces paramètres complètement différents se comparaient les uns aux autres et aussi comment ils se comparaient aux valeurs par défaut fournies par JetBrains. Donc, après discussion avec Yuri, j&#39;ai su que c&#39;était un bon matériel pour un article de blog.\n\nContenus\nToggleObjectifMachine d&#39;essai et projetsScénario de testQu&#39;est-ce que jstat -gcutilParamètres testésPar défaut (gris)Gros rouge)Équilibré (bleu)Sophistiqué (orange)RésultatsHeure de démarrage de l&#39;idéeIl est temps de charger le grand projetOuverture de deux microservices dans IDEAjstat -gcutil encoreDernière étape: recharger le monolithejstat -gcutil pour la dernière foisRésuméEt vous?\nObjectif\nMon plan est de comparer la performance de différents paramètres de mémoire IDEA dans un scénario proche de mon utilisation quotidienne (charger un grand projet, charger deux ou trois microservices, actualiser un grand projet après une vérification hypothétique). git pull), puis choisissez les paramètres les plus optimaux en termes de consommation de mémoire et d’amélioration de la vitesse.\nMachine d&#39;essai et projets\nPortable: MacBook Pro Retina, Intel Core i7 à 2,3 GHz, 16 Go, 1 600 MHz DDR3, Disque SSD, OS X Yosemite\nProjets\n\nBig Project &#8211; monolithe, 700 000 lignes de code (Java 8 et Groovy), modules 303 Gradle\nDeux microservices &#8211; petits projets avec 10 000 à 20 000 lignes de code (Java 8 et Groovy), chacun avec un module Gradle\n\nScénario de test\n\nFermer tous les projets dans Idea\nMettez les paramètres à tester dans le fichier idea.vmoptions\nRéinitialiser mon ordinateur portable\nAprès un démarrage, fermez tous les programmes indépendants (communicateurs, etc.)\nIdée ouverte (temps de mesure)\nOpen Big Project (temps de mesure)\nVérifiez jstat -gcutil\nOuvrez deux autres projets: Microservice One et Microservice Two (temps de mesure)\nVérifiez jstat -gcutil\nRetournez à Big Project et cliquez sur le bouton “Refresh Gradle project” (mesure du temps).\nVérifiez jstat -gcutil\n\nQu&#39;est-ce que jstat -gcutil\nJstat est un outil disponible dans votre JDK pour surveiller les statistiques de JVM et de Garbage Collector. Il y a beaucoup d&#39;options différentes pour collecter diverses données (la documentation complète est ici), mais une seule nous intéresse: -gcutil:\n-gcutil - Résumé des statistiques de la récupération de place.\n\nS0: utilisation de l&#39;espace 0 du survivant en pourcentage de la capacité actuelle de l&#39;espace.\nS1: utilisation de l&#39;espace 1 du survivant en pourcentage de la capacité actuelle de l&#39;espace.\nE: utilisation de l&#39;espace Eden en pourcentage de la capacité actuelle de l&#39;espace.\nO: Utilisation de l&#39;ancien espace en pourcentage de la capacité actuelle de l&#39;espace.\nM: utilisation des méta-espaces en pourcentage de la capacité actuelle de l&#39;espace.\nCCS: Utilisation de l&#39;espace de classes compressé en pourcentage.\nYGC: Nombre d&#39;événements GC de la nouvelle génération.\nYGCT: heure de la collecte des ordures de la jeune génération.\nFGC: Nombre d&#39;événements complets du GC.\nFGCT: heure de récupération complète des ordures.\nGCT: Temps total de ramassage des ordures.\n\nExemple de sortie de cette commande ressemble à ceci:\nS0 S1 E O M CCS YG YGCT FGC FGCT GCT\n89.70 0.00 81.26 74.27 95.68 91.76 40 2.444 14 0.715 3.159\n\nDans ce billet, les paramètres les plus importants sont le nombre d’événements GC (YGC et FGC) et les temps de collecte (YGCT et FGCT).\nParamètres testés\nJ&#39;ai testé quatre réglages différents, pour faciliter la lecture, un nom a été attribué à chacun d&#39;entre eux.\nPar défaut (gris)\nCe sont des paramètres intégrés fournis par JetBrains, mais IDEA 15 les utilise:\n1\n2\n3\n4\n5\n\n-Xms128m\n-Xmx750m\n-XX: MaxPermSize = 350m\n-XX: ReservedCodeCacheSize = 240m\n-XX: + UseCompressedOops\nGros rouge)\n4096 Mo pour Xmx et 1024 Mo pour ReservedCodeCacheSize, c’est beaucoup de mémoire.\n1\n2\n3\n4\n\n-Xms1024m\n-Xmx4096m\n-XX: ReservedCodeCacheSize = 1024m\n-XX: + UseCompressedOops\n\nÉquilibré (bleu)\n2 Go pour Xmx et 2 Go pour Xms, approche plus équilibrée de la consommation de mémoire\n1\n2\n3\n4\n\n-Xms2g\n-Xmx2g\n-XX: ReservedCodeCacheSize = 1024m\n-XX: + UseCompressedOops\n\nSophistiqué (orange)\nComme ci-dessus, 2 Go pour Xmx et 2 Go pour Xms, mais un garbage collector différent est spécifié et de nombreux indicateurs différents pour la gestion du GC et de la mémoire. J&#39;ai reçu ces paramètres de Yuri.\n1\n2\n3\n4\n5\n6\n7\n8\n9\ndix\n11\n12\n13\n14\n15\n16\n17\n\n-serveur\n-Xms2g\n-Xmx2g\n-XX: NewRatio = 3\n-Xss16m\n-XX: + UseConcMarkSweepGC\n-XX: + CMSParallelRemarkEnabled\n-XX: ConcGCThreads = 4\n-XX: ReservedCodeCacheSize = 240m\n-XX: + AlwaysPreTouch\n-XX: + Compilation à plusieurs niveaux\n-XX: + UseCompressedOops\n-XX: SoftRefLRUPolicyMSPerMB = 50\n-Dsun.io.useCanonCaches = false\n-Djava.net.preferIPv4Stack = true\n-Djsse.enableSNIExtension = false\n-un\nCe sont donc nos configurations de test. Pour réaliser nos scénarios de test, nous devons créer un fichier. idée.vmoptions sous ~ / Library / Preferences / IntelliJIdea15 / (il est spécifique à Mac OS, pour voir comment modifier ces paramètres pour votre système d&#39;exploitation, consultez cet article).\nIl est maintenant temps de réaliser nos scénarios de test et de comparer les résultats.\nRésultats\nHeure de démarrage de l&#39;idée\n\nComme vous pouvez le constater, le temps de démarrage ne dépend pas des paramètres de la mémoire. Le temps de démarrage d&#39;une idée est d&#39;environ 10 secondes pour tous les scénarios de test, peu importe la quantité de mémoire allouée. Et ce n’est pas une surprise, car ces paramètres ne devraient pas affecter le comportement des applications à un stade aussi précoce.\nIl est temps de charger le grand projet\nOk, il est maintenant temps de charger notre Monolith et ses 700 000 lignes de code.\nEnfin, il y a quelques différences. Les paramètres par défaut sont presque trois fois moins performants que les autres. Apparemment, si grande base de code a besoin de plus de mémoire 🙂 Et si nous exécutons\n1\n\njstat -gcutil \nnous remarquerons que Garbage Collector était vraiment très occupé avec les paramètres par défaut lorsque nous le comparons à d’autres configurations.\n\n\nNon seulement le temps total passé par le GC à libérer de la mémoire est considérablement plus élevé (environ 50 fois plus), mais le temps d&#39;exécution moyen du Full GC est également beaucoup plus long. Les longues périodes consacrées aux GC complets sont la principale cause de la faible réactivité de notre IDE.\nOuverture de deux microservices dans IDEA\nBien, notre monolith est chargé mais nous devons ajouter du code à deux microservices plus petits. Alors ouvrons-les dans IDEA et comparons les temps totaux.\n\nDans ce scénario de test, nous voyons que les différences sont toujours visibles et Sophistiqué gagne ici, Défaut est loin derrière le reste.\njstat -gcutil encore\nAprès avoir chargé deux microservices, nous pouvons vérifier les performances de Garbage Collectors avec trois projets ouverts. Nous pouvons constater que trois paramètres personnalisés se ressemblent presque et que les résultats des paramètres par défaut sont très, très médiocres.\n\n\nDernière étape: recharger le monolithe\nNous avons donc codé pendant un moment et nous devons maintenant récupérer la dernière version de The Big Project du référentiel, puis actualiser Gradle Project afin que IDEA puisse voir toutes les nouvelles classes, etc.\n\nNote importante: La barre pour la configuration par défaut est si élevée car IDEA est tombé en panne lors de l&#39;actualisation et je ne pouvais pas mesurer le temps réel. La mémoire simplement affectée n&#39;était pas suffisante pour effectuer cette opération.\nMais en regardant les trois meilleurs, nous voyons que Big settings a actualisé le projet dans les plus brefs délais, de sorte que la plus grande mémoire affectée aide un peu ici.\njstat -gcutil pour la dernière fois\nIDEA n’ayant pas pu actualiser le projet avec Défaut paramètres, ils ne sont pas inclus dans cette mesure.\n\n\nDans ces derniers graphiques, nous voyons que les différences entre les temps totaux sont assez faibles, mais le simple GC intégral est le plus rapide avec Gros paramètres appliqués. Encore une fois, il semble que Xmx de très grande taille aide un peu plus en termes de réactivité.\nRésumé\nDans cette courte expérience, j&#39;ai essayé de tester tout ce que nous pouvions gagner en personnalisant les paramètres de mémoire d&#39;IntelliJ IDEA. Il semble que même quelques ajustements simples puissent considérablement améliorer les performances de notre IDE et accélérer notre travail. Bien sûr, plus vous affectez de mémoire, plus vous obtiendrez de meilleurs résultats, mais nous utilisons IDE pour de nombreuses applications différentes qui consomment également de la mémoire. Notre objectif devrait donc être de trouver un équilibre entre gain de performance et consommation de mémoire. Je pense que dans la plupart des cas, le réglage Xmx valoriser entre 2g et 3g est la meilleure approche. Si vous avez un peu plus de temps, vous pouvez utiliser jstat et jvisualm pour vérifier l’incidence de la modification de différents indicateurs de machine virtuelle sur les performances et l’encombrement de la mémoire.\nEt vous?\nEt vous? Quelle est votre configuration idea.vmoptions? Avez-vous d&#39;autres moyens d&#39;améliorer les performances d&#39;InteliJ IDEA?","paragraphs":["Ne soyez pas un Scrooge et donnez à votre IDE un peu plus de mémoire\nHier, nous avons discuté de la personnalisation des paramètres de mémoire dans IntelliJ IDEA. Il est apparu que certaines personnes ne le faisaient pas, certaines personnes (comme moi) utilisaient un simple jeu de modifications et certains développeurs élaboraient une configuration sophistiquée et sophistiquée qui répondait à leurs besoins. Alors que je travaillais pour un projet en cours, j’ai dû faire face à plusieurs petits projets de microservices et à un projet plus ancien, l’une des activités principales du client. Et après avoir appliqué certains changements, j&#39;ai constaté une nette amélioration en termes de rapidité et de réactivité de l&#39;IDE. Mais à cette époque, je ne mesurais pas ce qui avait changé exactement, c’était seulement une observation subjective que “IDEA est maintenant plus rapide”.\nMais au cours de cette discussion, un des développeurs travaillant pour le même client (merci Yuri) m&#39;a envoyé ses paramètres et j&#39;ai été vraiment dépassé par leur niveau de complexité. J&#39;étais heureux avec ma propre configuration, mais j&#39;étais également curieux de savoir comment ces paramètres complètement différents se comparaient les uns aux autres et aussi comment ils se comparaient aux valeurs par défaut fournies par JetBrains. Donc, après discussion avec Yuri, j&#39;ai su que c&#39;était un bon matériel pour un article de blog.","Contenus\nToggleObjectifMachine d&#39;essai et projetsScénario de testQu&#39;est-ce que jstat -gcutilParamètres testésPar défaut (gris)Gros rouge)Équilibré (bleu)Sophistiqué (orange)RésultatsHeure de démarrage de l&#39;idéeIl est temps de charger le grand projetOuverture de deux microservices dans IDEAjstat -gcutil encoreDernière étape: recharger le monolithejstat -gcutil pour la dernière foisRésuméEt vous?\nObjectif\nMon plan est de comparer la performance de différents paramètres de mémoire IDEA dans un scénario proche de mon utilisation quotidienne (charger un grand projet, charger deux ou trois microservices, actualiser un grand projet après une vérification hypothétique). git pull), puis choisissez les paramètres les plus optimaux en termes de consommation de mémoire et d’amélioration de la vitesse.\nMachine d&#39;essai et projets\nPortable: MacBook Pro Retina, Intel Core i7 à 2,3 GHz, 16 Go, 1 600 MHz DDR3, Disque SSD, OS X Yosemite\nProjets","Big Project &#8211; monolithe, 700 000 lignes de code (Java 8 et Groovy), modules 303 Gradle\nDeux microservices &#8211; petits projets avec 10 000 à 20 000 lignes de code (Java 8 et Groovy), chacun avec un module Gradle","Scénario de test","Fermer tous les projets dans Idea\nMettez les paramètres à tester dans le fichier idea.vmoptions\nRéinitialiser mon ordinateur portable\nAprès un démarrage, fermez tous les programmes indépendants (communicateurs, etc.)\nIdée ouverte (temps de mesure)\nOpen Big Project (temps de mesure)\nVérifiez jstat -gcutil\nOuvrez deux autres projets: Microservice One et Microservice Two (temps de mesure)\nVérifiez jstat -gcutil\nRetournez à Big Project et cliquez sur le bouton “Refresh Gradle project” (mesure du temps).\nVérifiez jstat -gcutil","Qu&#39;est-ce que jstat -gcutil\nJstat est un outil disponible dans votre JDK pour surveiller les statistiques de JVM et de Garbage Collector. Il y a beaucoup d&#39;options différentes pour collecter diverses données (la documentation complète est ici), mais une seule nous intéresse: -gcutil:\n-gcutil - Résumé des statistiques de la récupération de place.","S0: utilisation de l&#39;espace 0 du survivant en pourcentage de la capacité actuelle de l&#39;espace.\nS1: utilisation de l&#39;espace 1 du survivant en pourcentage de la capacité actuelle de l&#39;espace.\nE: utilisation de l&#39;espace Eden en pourcentage de la capacité actuelle de l&#39;espace.\nO: Utilisation de l&#39;ancien espace en pourcentage de la capacité actuelle de l&#39;espace.\nM: utilisation des méta-espaces en pourcentage de la capacité actuelle de l&#39;espace.\nCCS: Utilisation de l&#39;espace de classes compressé en pourcentage.\nYGC: Nombre d&#39;événements GC de la nouvelle génération.\nYGCT: heure de la collecte des ordures de la jeune génération.\nFGC: Nombre d&#39;événements complets du GC.\nFGCT: heure de récupération complète des ordures.\nGCT: Temps total de ramassage des ordures.","Exemple de sortie de cette commande ressemble à ceci:\nS0 S1 E O M CCS YG YGCT FGC FGCT GCT\n89.70 0.00 81.26 74.27 95.68 91.76 40 2.444 14 0.715 3.159","Dans ce billet, les paramètres les plus importants sont le nombre d’événements GC (YGC et FGC) et les temps de collecte (YGCT et FGCT).\nParamètres testés\nJ&#39;ai testé quatre réglages différents, pour faciliter la lecture, un nom a été attribué à chacun d&#39;entre eux.\nPar défaut (gris)\nCe sont des paramètres intégrés fournis par JetBrains, mais IDEA 15 les utilise:\n1\n2\n3\n4\n5","-Xms128m\n-Xmx750m\n-XX: MaxPermSize = 350m\n-XX: ReservedCodeCacheSize = 240m\n-XX: + UseCompressedOops\nGros rouge)\n4096 Mo pour Xmx et 1024 Mo pour ReservedCodeCacheSize, c’est beaucoup de mémoire.\n1\n2\n3\n4","-Xms1024m\n-Xmx4096m\n-XX: ReservedCodeCacheSize = 1024m\n-XX: + UseCompressedOops","Équilibré (bleu)\n2 Go pour Xmx et 2 Go pour Xms, approche plus équilibrée de la consommation de mémoire\n1\n2\n3\n4","-Xms2g\n-Xmx2g\n-XX: ReservedCodeCacheSize = 1024m\n-XX: + UseCompressedOops","Sophistiqué (orange)\nComme ci-dessus, 2 Go pour Xmx et 2 Go pour Xms, mais un garbage collector différent est spécifié et de nombreux indicateurs différents pour la gestion du GC et de la mémoire. J&#39;ai reçu ces paramètres de Yuri.\n1\n2\n3\n4\n5\n6\n7\n8\n9\ndix\n11\n12\n13\n14\n15\n16\n17","-serveur\n-Xms2g\n-Xmx2g\n-XX: NewRatio = 3\n-Xss16m\n-XX: + UseConcMarkSweepGC\n-XX: + CMSParallelRemarkEnabled\n-XX: ConcGCThreads = 4\n-XX: ReservedCodeCacheSize = 240m\n-XX: + AlwaysPreTouch\n-XX: + Compilation à plusieurs niveaux\n-XX: + UseCompressedOops\n-XX: SoftRefLRUPolicyMSPerMB = 50\n-Dsun.io.useCanonCaches = false\n-Djava.net.preferIPv4Stack = true\n-Djsse.enableSNIExtension = false\n-un\nCe sont donc nos configurations de test. Pour réaliser nos scénarios de test, nous devons créer un fichier. idée.vmoptions sous ~ / Library / Preferences / IntelliJIdea15 / (il est spécifique à Mac OS, pour voir comment modifier ces paramètres pour votre système d&#39;exploitation, consultez cet article).\nIl est maintenant temps de réaliser nos scénarios de test et de comparer les résultats.\nRésultats\nHeure de démarrage de l&#39;idée","Comme vous pouvez le constater, le temps de démarrage ne dépend pas des paramètres de la mémoire. Le temps de démarrage d&#39;une idée est d&#39;environ 10 secondes pour tous les scénarios de test, peu importe la quantité de mémoire allouée. Et ce n’est pas une surprise, car ces paramètres ne devraient pas affecter le comportement des applications à un stade aussi précoce.\nIl est temps de charger le grand projet\nOk, il est maintenant temps de charger notre Monolith et ses 700 000 lignes de code.\nEnfin, il y a quelques différences. Les paramètres par défaut sont presque trois fois moins performants que les autres. Apparemment, si grande base de code a besoin de plus de mémoire 🙂 Et si nous exécutons\n1","jstat -gcutil \nnous remarquerons que Garbage Collector était vraiment très occupé avec les paramètres par défaut lorsque nous le comparons à d’autres configurations.","Non seulement le temps total passé par le GC à libérer de la mémoire est considérablement plus élevé (environ 50 fois plus), mais le temps d&#39;exécution moyen du Full GC est également beaucoup plus long. Les longues périodes consacrées aux GC complets sont la principale cause de la faible réactivité de notre IDE.\nOuverture de deux microservices dans IDEA\nBien, notre monolith est chargé mais nous devons ajouter du code à deux microservices plus petits. Alors ouvrons-les dans IDEA et comparons les temps totaux.","Dans ce scénario de test, nous voyons que les différences sont toujours visibles et Sophistiqué gagne ici, Défaut est loin derrière le reste.\njstat -gcutil encore\nAprès avoir chargé deux microservices, nous pouvons vérifier les performances de Garbage Collectors avec trois projets ouverts. Nous pouvons constater que trois paramètres personnalisés se ressemblent presque et que les résultats des paramètres par défaut sont très, très médiocres.","Dernière étape: recharger le monolithe\nNous avons donc codé pendant un moment et nous devons maintenant récupérer la dernière version de The Big Project du référentiel, puis actualiser Gradle Project afin que IDEA puisse voir toutes les nouvelles classes, etc.","Note importante: La barre pour la configuration par défaut est si élevée car IDEA est tombé en panne lors de l&#39;actualisation et je ne pouvais pas mesurer le temps réel. La mémoire simplement affectée n&#39;était pas suffisante pour effectuer cette opération.\nMais en regardant les trois meilleurs, nous voyons que Big settings a actualisé le projet dans les plus brefs délais, de sorte que la plus grande mémoire affectée aide un peu ici.\njstat -gcutil pour la dernière fois\nIDEA n’ayant pas pu actualiser le projet avec Défaut paramètres, ils ne sont pas inclus dans cette mesure.","Dans ces derniers graphiques, nous voyons que les différences entre les temps totaux sont assez faibles, mais le simple GC intégral est le plus rapide avec Gros paramètres appliqués. Encore une fois, il semble que Xmx de très grande taille aide un peu plus en termes de réactivité.\nRésumé\nDans cette courte expérience, j&#39;ai essayé de tester tout ce que nous pouvions gagner en personnalisant les paramètres de mémoire d&#39;IntelliJ IDEA. Il semble que même quelques ajustements simples puissent considérablement améliorer les performances de notre IDE et accélérer notre travail. Bien sûr, plus vous affectez de mémoire, plus vous obtiendrez de meilleurs résultats, mais nous utilisons IDE pour de nombreuses applications différentes qui consomment également de la mémoire. Notre objectif devrait donc être de trouver un équilibre entre gain de performance et consommation de mémoire. Je pense que dans la plupart des cas, le réglage Xmx valoriser entre 2g et 3g est la meilleure approche. Si vous avez un peu plus de temps, vous pouvez utiliser jstat et jvisualm pour vérifier l’incidence de la modification de différents indicateurs de machine virtuelle sur les performances et l’encombrement de la mémoire.\nEt vous?\nEt vous? Quelle est votre configuration idea.vmoptions? Avez-vous d&#39;autres moyens d&#39;améliorer les performances d&#39;InteliJ IDEA?"],"content_blocks":[{"id":"text-1","type":"text","heading":"","plain_text":"Ne soyez pas un Scrooge et donnez à votre IDE un peu plus de mémoire\nHier, nous avons discuté de la personnalisation des paramètres de mémoire dans IntelliJ IDEA. Il est apparu que certaines personnes ne le faisaient pas, certaines personnes (comme moi) utilisaient un simple jeu de modifications et certains développeurs élaboraient une configuration sophistiquée et sophistiquée qui répondait à leurs besoins. Alors que je travaillais pour un projet en cours, j’ai dû faire face à plusieurs petits projets de microservices et à un projet plus ancien, l’une des activités principales du client. Et après avoir appliqué certains changements, j&#39;ai constaté une nette amélioration en termes de rapidité et de réactivité de l&#39;IDE. Mais à cette époque, je ne mesurais pas ce qui avait changé exactement, c’était seulement une observation subjective que “IDEA est maintenant plus rapide”.\nMais au cours de cette discussion, un des développeurs travaillant pour le même client (merci Yuri) m&#39;a envoyé ses paramètres et j&#39;ai été vraiment dépassé par leur niveau de complexité. J&#39;étais heureux avec ma propre configuration, mais j&#39;étais également curieux de savoir comment ces paramètres complètement différents se comparaient les uns aux autres et aussi comment ils se comparaient aux valeurs par défaut fournies par JetBrains. Donc, après discussion avec Yuri, j&#39;ai su que c&#39;était un bon matériel pour un article de blog.","html":"<p>Ne soyez pas un Scrooge et donnez à votre IDE un peu plus de mémoire\nHier, nous avons discuté de la personnalisation des paramètres de mémoire dans IntelliJ IDEA. Il est apparu que certaines personnes ne le faisaient pas, certaines personnes (comme moi) utilisaient un simple jeu de modifications et certains développeurs élaboraient une configuration sophistiquée et sophistiquée qui répondait à leurs besoins. Alors que je travaillais pour un projet en cours, j’ai dû faire face à plusieurs petits projets de microservices et à un projet plus ancien, l’une des activités principales du client. Et après avoir appliqué certains changements, j&#039;ai constaté une nette amélioration en termes de rapidité et de réactivité de l&#039;IDE. Mais à cette époque, je ne mesurais pas ce qui avait changé exactement, c’était seulement une observation subjective que “IDEA est maintenant plus rapide”.\nMais au cours de cette discussion, un des développeurs travaillant pour le même client (merci Yuri) m&#039;a envoyé ses paramètres et j&#039;ai été vraiment dépassé par leur niveau de complexité. J&#039;étais heureux avec ma propre configuration, mais j&#039;étais également curieux de savoir comment ces paramètres complètement différents se comparaient les uns aux autres et aussi comment ils se comparaient aux valeurs par défaut fournies par JetBrains. Donc, après discussion avec Yuri, j&#039;ai su que c&#039;était un bon matériel pour un article de blog.</p>"},{"id":"text-2","type":"text","heading":"","plain_text":"Contenus\nToggleObjectifMachine d&#39;essai et projetsScénario de testQu&#39;est-ce que jstat -gcutilParamètres testésPar défaut (gris)Gros rouge)Équilibré (bleu)Sophistiqué (orange)RésultatsHeure de démarrage de l&#39;idéeIl est temps de charger le grand projetOuverture de deux microservices dans IDEAjstat -gcutil encoreDernière étape: recharger le monolithejstat -gcutil pour la dernière foisRésuméEt vous?\nObjectif\nMon plan est de comparer la performance de différents paramètres de mémoire IDEA dans un scénario proche de mon utilisation quotidienne (charger un grand projet, charger deux ou trois microservices, actualiser un grand projet après une vérification hypothétique). git pull), puis choisissez les paramètres les plus optimaux en termes de consommation de mémoire et d’amélioration de la vitesse.\nMachine d&#39;essai et projets\nPortable: MacBook Pro Retina, Intel Core i7 à 2,3 GHz, 16 Go, 1 600 MHz DDR3, Disque SSD, OS X Yosemite\nProjets","html":"<p>Contenus\nToggleObjectifMachine d&#039;essai et projetsScénario de testQu&#039;est-ce que jstat -gcutilParamètres testésPar défaut (gris)Gros rouge)Équilibré (bleu)Sophistiqué (orange)RésultatsHeure de démarrage de l&#039;idéeIl est temps de charger le grand projetOuverture de deux microservices dans IDEAjstat -gcutil encoreDernière étape: recharger le monolithejstat -gcutil pour la dernière foisRésuméEt vous?\nObjectif\nMon plan est de comparer la performance de différents paramètres de mémoire IDEA dans un scénario proche de mon utilisation quotidienne (charger un grand projet, charger deux ou trois microservices, actualiser un grand projet après une vérification hypothétique). git pull), puis choisissez les paramètres les plus optimaux en termes de consommation de mémoire et d’amélioration de la vitesse.\nMachine d&#039;essai et projets\nPortable: MacBook Pro Retina, Intel Core i7 à 2,3 GHz, 16 Go, 1 600 MHz DDR3, Disque SSD, OS X Yosemite\nProjets</p>"},{"id":"text-3","type":"text","heading":"","plain_text":"Big Project &#8211; monolithe, 700 000 lignes de code (Java 8 et Groovy), modules 303 Gradle\nDeux microservices &#8211; petits projets avec 10 000 à 20 000 lignes de code (Java 8 et Groovy), chacun avec un module Gradle","html":"<p>Big Project &#8211; monolithe, 700 000 lignes de code (Java 8 et Groovy), modules 303 Gradle\nDeux microservices &#8211; petits projets avec 10 000 à 20 000 lignes de code (Java 8 et Groovy), chacun avec un module Gradle</p>"},{"id":"text-4","type":"text","heading":"","plain_text":"Scénario de test","html":"<p>Scénario de test</p>"},{"id":"text-5","type":"text","heading":"","plain_text":"Fermer tous les projets dans Idea\nMettez les paramètres à tester dans le fichier idea.vmoptions\nRéinitialiser mon ordinateur portable\nAprès un démarrage, fermez tous les programmes indépendants (communicateurs, etc.)\nIdée ouverte (temps de mesure)\nOpen Big Project (temps de mesure)\nVérifiez jstat -gcutil\nOuvrez deux autres projets: Microservice One et Microservice Two (temps de mesure)\nVérifiez jstat -gcutil\nRetournez à Big Project et cliquez sur le bouton “Refresh Gradle project” (mesure du temps).\nVérifiez jstat -gcutil","html":"<p>Fermer tous les projets dans Idea\nMettez les paramètres à tester dans le fichier idea.vmoptions\nRéinitialiser mon ordinateur portable\nAprès un démarrage, fermez tous les programmes indépendants (communicateurs, etc.)\nIdée ouverte (temps de mesure)\nOpen Big Project (temps de mesure)\nVérifiez jstat -gcutil\nOuvrez deux autres projets: Microservice One et Microservice Two (temps de mesure)\nVérifiez jstat -gcutil\nRetournez à Big Project et cliquez sur le bouton “Refresh Gradle project” (mesure du temps).\nVérifiez jstat -gcutil</p>"},{"id":"text-6","type":"text","heading":"","plain_text":"Qu&#39;est-ce que jstat -gcutil\nJstat est un outil disponible dans votre JDK pour surveiller les statistiques de JVM et de Garbage Collector. Il y a beaucoup d&#39;options différentes pour collecter diverses données (la documentation complète est ici), mais une seule nous intéresse: -gcutil:\n-gcutil - Résumé des statistiques de la récupération de place.","html":"<p>Qu&#039;est-ce que jstat -gcutil\nJstat est un outil disponible dans votre JDK pour surveiller les statistiques de JVM et de Garbage Collector. Il y a beaucoup d&#039;options différentes pour collecter diverses données (la documentation complète est ici), mais une seule nous intéresse: -gcutil:\n-gcutil - Résumé des statistiques de la récupération de place.</p>"},{"id":"text-7","type":"text","heading":"","plain_text":"S0: utilisation de l&#39;espace 0 du survivant en pourcentage de la capacité actuelle de l&#39;espace.\nS1: utilisation de l&#39;espace 1 du survivant en pourcentage de la capacité actuelle de l&#39;espace.\nE: utilisation de l&#39;espace Eden en pourcentage de la capacité actuelle de l&#39;espace.\nO: Utilisation de l&#39;ancien espace en pourcentage de la capacité actuelle de l&#39;espace.\nM: utilisation des méta-espaces en pourcentage de la capacité actuelle de l&#39;espace.\nCCS: Utilisation de l&#39;espace de classes compressé en pourcentage.\nYGC: Nombre d&#39;événements GC de la nouvelle génération.\nYGCT: heure de la collecte des ordures de la jeune génération.\nFGC: Nombre d&#39;événements complets du GC.\nFGCT: heure de récupération complète des ordures.\nGCT: Temps total de ramassage des ordures.","html":"<p>S0: utilisation de l&#039;espace 0 du survivant en pourcentage de la capacité actuelle de l&#039;espace.\nS1: utilisation de l&#039;espace 1 du survivant en pourcentage de la capacité actuelle de l&#039;espace.\nE: utilisation de l&#039;espace Eden en pourcentage de la capacité actuelle de l&#039;espace.\nO: Utilisation de l&#039;ancien espace en pourcentage de la capacité actuelle de l&#039;espace.\nM: utilisation des méta-espaces en pourcentage de la capacité actuelle de l&#039;espace.\nCCS: Utilisation de l&#039;espace de classes compressé en pourcentage.\nYGC: Nombre d&#039;événements GC de la nouvelle génération.\nYGCT: heure de la collecte des ordures de la jeune génération.\nFGC: Nombre d&#039;événements complets du GC.\nFGCT: heure de récupération complète des ordures.\nGCT: Temps total de ramassage des ordures.</p>"},{"id":"text-8","type":"text","heading":"","plain_text":"Exemple de sortie de cette commande ressemble à ceci:\nS0 S1 E O M CCS YG YGCT FGC FGCT GCT\n89.70 0.00 81.26 74.27 95.68 91.76 40 2.444 14 0.715 3.159","html":"<p>Exemple de sortie de cette commande ressemble à ceci:\nS0 S1 E O M CCS YG YGCT FGC FGCT GCT\n89.70 0.00 81.26 74.27 95.68 91.76 40 2.444 14 0.715 3.159</p>"},{"id":"text-9","type":"text","heading":"","plain_text":"Dans ce billet, les paramètres les plus importants sont le nombre d’événements GC (YGC et FGC) et les temps de collecte (YGCT et FGCT).\nParamètres testés\nJ&#39;ai testé quatre réglages différents, pour faciliter la lecture, un nom a été attribué à chacun d&#39;entre eux.\nPar défaut (gris)\nCe sont des paramètres intégrés fournis par JetBrains, mais IDEA 15 les utilise:\n1\n2\n3\n4\n5","html":"<p>Dans ce billet, les paramètres les plus importants sont le nombre d’événements GC (YGC et FGC) et les temps de collecte (YGCT et FGCT).\nParamètres testés\nJ&#039;ai testé quatre réglages différents, pour faciliter la lecture, un nom a été attribué à chacun d&#039;entre eux.\nPar défaut (gris)\nCe sont des paramètres intégrés fournis par JetBrains, mais IDEA 15 les utilise:\n1\n2\n3\n4\n5</p>"},{"id":"text-10","type":"text","heading":"","plain_text":"-Xms128m\n-Xmx750m\n-XX: MaxPermSize = 350m\n-XX: ReservedCodeCacheSize = 240m\n-XX: + UseCompressedOops\nGros rouge)\n4096 Mo pour Xmx et 1024 Mo pour ReservedCodeCacheSize, c’est beaucoup de mémoire.\n1\n2\n3\n4","html":"<p>-Xms128m\n-Xmx750m\n-XX: MaxPermSize = 350m\n-XX: ReservedCodeCacheSize = 240m\n-XX: + UseCompressedOops\nGros rouge)\n4096 Mo pour Xmx et 1024 Mo pour ReservedCodeCacheSize, c’est beaucoup de mémoire.\n1\n2\n3\n4</p>"},{"id":"text-11","type":"text","heading":"","plain_text":"-Xms1024m\n-Xmx4096m\n-XX: ReservedCodeCacheSize = 1024m\n-XX: + UseCompressedOops","html":"<p>-Xms1024m\n-Xmx4096m\n-XX: ReservedCodeCacheSize = 1024m\n-XX: + UseCompressedOops</p>"},{"id":"text-12","type":"text","heading":"","plain_text":"Équilibré (bleu)\n2 Go pour Xmx et 2 Go pour Xms, approche plus équilibrée de la consommation de mémoire\n1\n2\n3\n4","html":"<p>Équilibré (bleu)\n2 Go pour Xmx et 2 Go pour Xms, approche plus équilibrée de la consommation de mémoire\n1\n2\n3\n4</p>"},{"id":"text-13","type":"text","heading":"","plain_text":"-Xms2g\n-Xmx2g\n-XX: ReservedCodeCacheSize = 1024m\n-XX: + UseCompressedOops","html":"<p>-Xms2g\n-Xmx2g\n-XX: ReservedCodeCacheSize = 1024m\n-XX: + UseCompressedOops</p>"},{"id":"text-14","type":"text","heading":"","plain_text":"Sophistiqué (orange)\nComme ci-dessus, 2 Go pour Xmx et 2 Go pour Xms, mais un garbage collector différent est spécifié et de nombreux indicateurs différents pour la gestion du GC et de la mémoire. J&#39;ai reçu ces paramètres de Yuri.\n1\n2\n3\n4\n5\n6\n7\n8\n9\ndix\n11\n12\n13\n14\n15\n16\n17","html":"<p>Sophistiqué (orange)\nComme ci-dessus, 2 Go pour Xmx et 2 Go pour Xms, mais un garbage collector différent est spécifié et de nombreux indicateurs différents pour la gestion du GC et de la mémoire. J&#039;ai reçu ces paramètres de Yuri.\n1\n2\n3\n4\n5\n6\n7\n8\n9\ndix\n11\n12\n13\n14\n15\n16\n17</p>"},{"id":"text-15","type":"text","heading":"","plain_text":"-serveur\n-Xms2g\n-Xmx2g\n-XX: NewRatio = 3\n-Xss16m\n-XX: + UseConcMarkSweepGC\n-XX: + CMSParallelRemarkEnabled\n-XX: ConcGCThreads = 4\n-XX: ReservedCodeCacheSize = 240m\n-XX: + AlwaysPreTouch\n-XX: + Compilation à plusieurs niveaux\n-XX: + UseCompressedOops\n-XX: SoftRefLRUPolicyMSPerMB = 50\n-Dsun.io.useCanonCaches = false\n-Djava.net.preferIPv4Stack = true\n-Djsse.enableSNIExtension = false\n-un\nCe sont donc nos configurations de test. Pour réaliser nos scénarios de test, nous devons créer un fichier. idée.vmoptions sous ~ / Library / Preferences / IntelliJIdea15 / (il est spécifique à Mac OS, pour voir comment modifier ces paramètres pour votre système d&#39;exploitation, consultez cet article).\nIl est maintenant temps de réaliser nos scénarios de test et de comparer les résultats.\nRésultats\nHeure de démarrage de l&#39;idée","html":"<p>-serveur\n-Xms2g\n-Xmx2g\n-XX: NewRatio = 3\n-Xss16m\n-XX: + UseConcMarkSweepGC\n-XX: + CMSParallelRemarkEnabled\n-XX: ConcGCThreads = 4\n-XX: ReservedCodeCacheSize = 240m\n-XX: + AlwaysPreTouch\n-XX: + Compilation à plusieurs niveaux\n-XX: + UseCompressedOops\n-XX: SoftRefLRUPolicyMSPerMB = 50\n-Dsun.io.useCanonCaches = false\n-Djava.net.preferIPv4Stack = true\n-Djsse.enableSNIExtension = false\n-un\nCe sont donc nos configurations de test. Pour réaliser nos scénarios de test, nous devons créer un fichier. idée.vmoptions sous ~ / Library / Preferences / IntelliJIdea15 / (il est spécifique à Mac OS, pour voir comment modifier ces paramètres pour votre système d&#039;exploitation, consultez cet article).\nIl est maintenant temps de réaliser nos scénarios de test et de comparer les résultats.\nRésultats\nHeure de démarrage de l&#039;idée</p>"},{"id":"text-16","type":"text","heading":"","plain_text":"Comme vous pouvez le constater, le temps de démarrage ne dépend pas des paramètres de la mémoire. Le temps de démarrage d&#39;une idée est d&#39;environ 10 secondes pour tous les scénarios de test, peu importe la quantité de mémoire allouée. Et ce n’est pas une surprise, car ces paramètres ne devraient pas affecter le comportement des applications à un stade aussi précoce.\nIl est temps de charger le grand projet\nOk, il est maintenant temps de charger notre Monolith et ses 700 000 lignes de code.\nEnfin, il y a quelques différences. Les paramètres par défaut sont presque trois fois moins performants que les autres. Apparemment, si grande base de code a besoin de plus de mémoire 🙂 Et si nous exécutons\n1","html":"<p>Comme vous pouvez le constater, le temps de démarrage ne dépend pas des paramètres de la mémoire. Le temps de démarrage d&#039;une idée est d&#039;environ 10 secondes pour tous les scénarios de test, peu importe la quantité de mémoire allouée. Et ce n’est pas une surprise, car ces paramètres ne devraient pas affecter le comportement des applications à un stade aussi précoce.\nIl est temps de charger le grand projet\nOk, il est maintenant temps de charger notre Monolith et ses 700 000 lignes de code.\nEnfin, il y a quelques différences. Les paramètres par défaut sont presque trois fois moins performants que les autres. Apparemment, si grande base de code a besoin de plus de mémoire 🙂 Et si nous exécutons\n1</p>"},{"id":"text-17","type":"text","heading":"","plain_text":"jstat -gcutil \nnous remarquerons que Garbage Collector était vraiment très occupé avec les paramètres par défaut lorsque nous le comparons à d’autres configurations.","html":"<p>jstat -gcutil \nnous remarquerons que Garbage Collector était vraiment très occupé avec les paramètres par défaut lorsque nous le comparons à d’autres configurations.</p>"},{"id":"text-18","type":"text","heading":"","plain_text":"Non seulement le temps total passé par le GC à libérer de la mémoire est considérablement plus élevé (environ 50 fois plus), mais le temps d&#39;exécution moyen du Full GC est également beaucoup plus long. Les longues périodes consacrées aux GC complets sont la principale cause de la faible réactivité de notre IDE.\nOuverture de deux microservices dans IDEA\nBien, notre monolith est chargé mais nous devons ajouter du code à deux microservices plus petits. Alors ouvrons-les dans IDEA et comparons les temps totaux.","html":"<p>Non seulement le temps total passé par le GC à libérer de la mémoire est considérablement plus élevé (environ 50 fois plus), mais le temps d&#039;exécution moyen du Full GC est également beaucoup plus long. Les longues périodes consacrées aux GC complets sont la principale cause de la faible réactivité de notre IDE.\nOuverture de deux microservices dans IDEA\nBien, notre monolith est chargé mais nous devons ajouter du code à deux microservices plus petits. Alors ouvrons-les dans IDEA et comparons les temps totaux.</p>"},{"id":"text-19","type":"text","heading":"","plain_text":"Dans ce scénario de test, nous voyons que les différences sont toujours visibles et Sophistiqué gagne ici, Défaut est loin derrière le reste.\njstat -gcutil encore\nAprès avoir chargé deux microservices, nous pouvons vérifier les performances de Garbage Collectors avec trois projets ouverts. Nous pouvons constater que trois paramètres personnalisés se ressemblent presque et que les résultats des paramètres par défaut sont très, très médiocres.","html":"<p>Dans ce scénario de test, nous voyons que les différences sont toujours visibles et Sophistiqué gagne ici, Défaut est loin derrière le reste.\njstat -gcutil encore\nAprès avoir chargé deux microservices, nous pouvons vérifier les performances de Garbage Collectors avec trois projets ouverts. Nous pouvons constater que trois paramètres personnalisés se ressemblent presque et que les résultats des paramètres par défaut sont très, très médiocres.</p>"},{"id":"text-20","type":"text","heading":"","plain_text":"Dernière étape: recharger le monolithe\nNous avons donc codé pendant un moment et nous devons maintenant récupérer la dernière version de The Big Project du référentiel, puis actualiser Gradle Project afin que IDEA puisse voir toutes les nouvelles classes, etc.","html":"<p>Dernière étape: recharger le monolithe\nNous avons donc codé pendant un moment et nous devons maintenant récupérer la dernière version de The Big Project du référentiel, puis actualiser Gradle Project afin que IDEA puisse voir toutes les nouvelles classes, etc.</p>"},{"id":"text-21","type":"text","heading":"","plain_text":"Note importante: La barre pour la configuration par défaut est si élevée car IDEA est tombé en panne lors de l&#39;actualisation et je ne pouvais pas mesurer le temps réel. La mémoire simplement affectée n&#39;était pas suffisante pour effectuer cette opération.\nMais en regardant les trois meilleurs, nous voyons que Big settings a actualisé le projet dans les plus brefs délais, de sorte que la plus grande mémoire affectée aide un peu ici.\njstat -gcutil pour la dernière fois\nIDEA n’ayant pas pu actualiser le projet avec Défaut paramètres, ils ne sont pas inclus dans cette mesure.","html":"<p>Note importante: La barre pour la configuration par défaut est si élevée car IDEA est tombé en panne lors de l&#039;actualisation et je ne pouvais pas mesurer le temps réel. La mémoire simplement affectée n&#039;était pas suffisante pour effectuer cette opération.\nMais en regardant les trois meilleurs, nous voyons que Big settings a actualisé le projet dans les plus brefs délais, de sorte que la plus grande mémoire affectée aide un peu ici.\njstat -gcutil pour la dernière fois\nIDEA n’ayant pas pu actualiser le projet avec Défaut paramètres, ils ne sont pas inclus dans cette mesure.</p>"},{"id":"text-22","type":"text","heading":"","plain_text":"Dans ces derniers graphiques, nous voyons que les différences entre les temps totaux sont assez faibles, mais le simple GC intégral est le plus rapide avec Gros paramètres appliqués. Encore une fois, il semble que Xmx de très grande taille aide un peu plus en termes de réactivité.\nRésumé\nDans cette courte expérience, j&#39;ai essayé de tester tout ce que nous pouvions gagner en personnalisant les paramètres de mémoire d&#39;IntelliJ IDEA. Il semble que même quelques ajustements simples puissent considérablement améliorer les performances de notre IDE et accélérer notre travail. Bien sûr, plus vous affectez de mémoire, plus vous obtiendrez de meilleurs résultats, mais nous utilisons IDE pour de nombreuses applications différentes qui consomment également de la mémoire. Notre objectif devrait donc être de trouver un équilibre entre gain de performance et consommation de mémoire. Je pense que dans la plupart des cas, le réglage Xmx valoriser entre 2g et 3g est la meilleure approche. Si vous avez un peu plus de temps, vous pouvez utiliser jstat et jvisualm pour vérifier l’incidence de la modification de différents indicateurs de machine virtuelle sur les performances et l’encombrement de la mémoire.\nEt vous?\nEt vous? Quelle est votre configuration idea.vmoptions? Avez-vous d&#39;autres moyens d&#39;améliorer les performances d&#39;InteliJ IDEA?","html":"<p>Dans ces derniers graphiques, nous voyons que les différences entre les temps totaux sont assez faibles, mais le simple GC intégral est le plus rapide avec Gros paramètres appliqués. Encore une fois, il semble que Xmx de très grande taille aide un peu plus en termes de réactivité.\nRésumé\nDans cette courte expérience, j&#039;ai essayé de tester tout ce que nous pouvions gagner en personnalisant les paramètres de mémoire d&#039;IntelliJ IDEA. Il semble que même quelques ajustements simples puissent considérablement améliorer les performances de notre IDE et accélérer notre travail. Bien sûr, plus vous affectez de mémoire, plus vous obtiendrez de meilleurs résultats, mais nous utilisons IDE pour de nombreuses applications différentes qui consomment également de la mémoire. Notre objectif devrait donc être de trouver un équilibre entre gain de performance et consommation de mémoire. Je pense que dans la plupart des cas, le réglage Xmx valoriser entre 2g et 3g est la meilleure approche. Si vous avez un peu plus de temps, vous pouvez utiliser jstat et jvisualm pour vérifier l’incidence de la modification de différents indicateurs de machine virtuelle sur les performances et l’encombrement de la mémoire.\nEt vous?\nEt vous? Quelle est votre configuration idea.vmoptions? Avez-vous d&#039;autres moyens d&#039;améliorer les performances d&#039;InteliJ IDEA?</p>"}],"sections":[{"id":"text-1","heading":"Text","content":"Ne soyez pas un Scrooge et donnez à votre IDE un peu plus de mémoire\nHier, nous avons discuté de la personnalisation des paramètres de mémoire dans IntelliJ IDEA. Il est apparu que certaines personnes ne le faisaient pas, certaines personnes (comme moi) utilisaient un simple jeu de modifications et certains développeurs élaboraient une configuration sophistiquée et sophistiquée qui répondait à leurs besoins. Alors que je travaillais pour un projet en cours, j’ai dû faire face à plusieurs petits projets de microservices et à un projet plus ancien, l’une des activités principales du client. Et après avoir appliqué certains changements, j&#39;ai constaté une nette amélioration en termes de rapidité et de réactivité de l&#39;IDE. Mais à cette époque, je ne mesurais pas ce qui avait changé exactement, c’était seulement une observation subjective que “IDEA est maintenant plus rapide”.\nMais au cours de cette discussion, un des développeurs travaillant pour le même client (merci Yuri) m&#39;a envoyé ses paramètres et j&#39;ai été vraiment dépassé par leur niveau de complexité. J&#39;étais heureux avec ma propre configuration, mais j&#39;étais également curieux de savoir comment ces paramètres complètement différents se comparaient les uns aux autres et aussi comment ils se comparaient aux valeurs par défaut fournies par JetBrains. Donc, après discussion avec Yuri, j&#39;ai su que c&#39;était un bon matériel pour un article de blog."},{"id":"text-2","heading":"Text","content":"Contenus\nToggleObjectifMachine d&#39;essai et projetsScénario de testQu&#39;est-ce que jstat -gcutilParamètres testésPar défaut (gris)Gros rouge)Équilibré (bleu)Sophistiqué (orange)RésultatsHeure de démarrage de l&#39;idéeIl est temps de charger le grand projetOuverture de deux microservices dans IDEAjstat -gcutil encoreDernière étape: recharger le monolithejstat -gcutil pour la dernière foisRésuméEt vous?\nObjectif\nMon plan est de comparer la performance de différents paramètres de mémoire IDEA dans un scénario proche de mon utilisation quotidienne (charger un grand projet, charger deux ou trois microservices, actualiser un grand projet après une vérification hypothétique). git pull), puis choisissez les paramètres les plus optimaux en termes de consommation de mémoire et d’amélioration de la vitesse.\nMachine d&#39;essai et projets\nPortable: MacBook Pro Retina, Intel Core i7 à 2,3 GHz, 16 Go, 1 600 MHz DDR3, Disque SSD, OS X Yosemite\nProjets"},{"id":"text-3","heading":"Text","content":"Big Project &#8211; monolithe, 700 000 lignes de code (Java 8 et Groovy), modules 303 Gradle\nDeux microservices &#8211; petits projets avec 10 000 à 20 000 lignes de code (Java 8 et Groovy), chacun avec un module Gradle"},{"id":"text-4","heading":"Text","content":"Scénario de test"},{"id":"text-5","heading":"Text","content":"Fermer tous les projets dans Idea\nMettez les paramètres à tester dans le fichier idea.vmoptions\nRéinitialiser mon ordinateur portable\nAprès un démarrage, fermez tous les programmes indépendants (communicateurs, etc.)\nIdée ouverte (temps de mesure)\nOpen Big Project (temps de mesure)\nVérifiez jstat -gcutil\nOuvrez deux autres projets: Microservice One et Microservice Two (temps de mesure)\nVérifiez jstat -gcutil\nRetournez à Big Project et cliquez sur le bouton “Refresh Gradle project” (mesure du temps).\nVérifiez jstat -gcutil"},{"id":"text-6","heading":"Text","content":"Qu&#39;est-ce que jstat -gcutil\nJstat est un outil disponible dans votre JDK pour surveiller les statistiques de JVM et de Garbage Collector. Il y a beaucoup d&#39;options différentes pour collecter diverses données (la documentation complète est ici), mais une seule nous intéresse: -gcutil:\n-gcutil - Résumé des statistiques de la récupération de place."},{"id":"text-7","heading":"Text","content":"S0: utilisation de l&#39;espace 0 du survivant en pourcentage de la capacité actuelle de l&#39;espace.\nS1: utilisation de l&#39;espace 1 du survivant en pourcentage de la capacité actuelle de l&#39;espace.\nE: utilisation de l&#39;espace Eden en pourcentage de la capacité actuelle de l&#39;espace.\nO: Utilisation de l&#39;ancien espace en pourcentage de la capacité actuelle de l&#39;espace.\nM: utilisation des méta-espaces en pourcentage de la capacité actuelle de l&#39;espace.\nCCS: Utilisation de l&#39;espace de classes compressé en pourcentage.\nYGC: Nombre d&#39;événements GC de la nouvelle génération.\nYGCT: heure de la collecte des ordures de la jeune génération.\nFGC: Nombre d&#39;événements complets du GC.\nFGCT: heure de récupération complète des ordures.\nGCT: Temps total de ramassage des ordures."},{"id":"text-8","heading":"Text","content":"Exemple de sortie de cette commande ressemble à ceci:\nS0 S1 E O M CCS YG YGCT FGC FGCT GCT\n89.70 0.00 81.26 74.27 95.68 91.76 40 2.444 14 0.715 3.159"},{"id":"text-9","heading":"Text","content":"Dans ce billet, les paramètres les plus importants sont le nombre d’événements GC (YGC et FGC) et les temps de collecte (YGCT et FGCT).\nParamètres testés\nJ&#39;ai testé quatre réglages différents, pour faciliter la lecture, un nom a été attribué à chacun d&#39;entre eux.\nPar défaut (gris)\nCe sont des paramètres intégrés fournis par JetBrains, mais IDEA 15 les utilise:\n1\n2\n3\n4\n5"},{"id":"text-10","heading":"Text","content":"-Xms128m\n-Xmx750m\n-XX: MaxPermSize = 350m\n-XX: ReservedCodeCacheSize = 240m\n-XX: + UseCompressedOops\nGros rouge)\n4096 Mo pour Xmx et 1024 Mo pour ReservedCodeCacheSize, c’est beaucoup de mémoire.\n1\n2\n3\n4"},{"id":"text-11","heading":"Text","content":"-Xms1024m\n-Xmx4096m\n-XX: ReservedCodeCacheSize = 1024m\n-XX: + UseCompressedOops"},{"id":"text-12","heading":"Text","content":"Équilibré (bleu)\n2 Go pour Xmx et 2 Go pour Xms, approche plus équilibrée de la consommation de mémoire\n1\n2\n3\n4"},{"id":"text-13","heading":"Text","content":"-Xms2g\n-Xmx2g\n-XX: ReservedCodeCacheSize = 1024m\n-XX: + UseCompressedOops"},{"id":"text-14","heading":"Text","content":"Sophistiqué (orange)\nComme ci-dessus, 2 Go pour Xmx et 2 Go pour Xms, mais un garbage collector différent est spécifié et de nombreux indicateurs différents pour la gestion du GC et de la mémoire. J&#39;ai reçu ces paramètres de Yuri.\n1\n2\n3\n4\n5\n6\n7\n8\n9\ndix\n11\n12\n13\n14\n15\n16\n17"},{"id":"text-15","heading":"Text","content":"-serveur\n-Xms2g\n-Xmx2g\n-XX: NewRatio = 3\n-Xss16m\n-XX: + UseConcMarkSweepGC\n-XX: + CMSParallelRemarkEnabled\n-XX: ConcGCThreads = 4\n-XX: ReservedCodeCacheSize = 240m\n-XX: + AlwaysPreTouch\n-XX: + Compilation à plusieurs niveaux\n-XX: + UseCompressedOops\n-XX: SoftRefLRUPolicyMSPerMB = 50\n-Dsun.io.useCanonCaches = false\n-Djava.net.preferIPv4Stack = true\n-Djsse.enableSNIExtension = false\n-un\nCe sont donc nos configurations de test. Pour réaliser nos scénarios de test, nous devons créer un fichier. idée.vmoptions sous ~ / Library / Preferences / IntelliJIdea15 / (il est spécifique à Mac OS, pour voir comment modifier ces paramètres pour votre système d&#39;exploitation, consultez cet article).\nIl est maintenant temps de réaliser nos scénarios de test et de comparer les résultats.\nRésultats\nHeure de démarrage de l&#39;idée"},{"id":"text-16","heading":"Text","content":"Comme vous pouvez le constater, le temps de démarrage ne dépend pas des paramètres de la mémoire. Le temps de démarrage d&#39;une idée est d&#39;environ 10 secondes pour tous les scénarios de test, peu importe la quantité de mémoire allouée. Et ce n’est pas une surprise, car ces paramètres ne devraient pas affecter le comportement des applications à un stade aussi précoce.\nIl est temps de charger le grand projet\nOk, il est maintenant temps de charger notre Monolith et ses 700 000 lignes de code.\nEnfin, il y a quelques différences. Les paramètres par défaut sont presque trois fois moins performants que les autres. Apparemment, si grande base de code a besoin de plus de mémoire 🙂 Et si nous exécutons\n1"},{"id":"text-17","heading":"Text","content":"jstat -gcutil \nnous remarquerons que Garbage Collector était vraiment très occupé avec les paramètres par défaut lorsque nous le comparons à d’autres configurations."},{"id":"text-18","heading":"Text","content":"Non seulement le temps total passé par le GC à libérer de la mémoire est considérablement plus élevé (environ 50 fois plus), mais le temps d&#39;exécution moyen du Full GC est également beaucoup plus long. Les longues périodes consacrées aux GC complets sont la principale cause de la faible réactivité de notre IDE.\nOuverture de deux microservices dans IDEA\nBien, notre monolith est chargé mais nous devons ajouter du code à deux microservices plus petits. Alors ouvrons-les dans IDEA et comparons les temps totaux."},{"id":"text-19","heading":"Text","content":"Dans ce scénario de test, nous voyons que les différences sont toujours visibles et Sophistiqué gagne ici, Défaut est loin derrière le reste.\njstat -gcutil encore\nAprès avoir chargé deux microservices, nous pouvons vérifier les performances de Garbage Collectors avec trois projets ouverts. Nous pouvons constater que trois paramètres personnalisés se ressemblent presque et que les résultats des paramètres par défaut sont très, très médiocres."},{"id":"text-20","heading":"Text","content":"Dernière étape: recharger le monolithe\nNous avons donc codé pendant un moment et nous devons maintenant récupérer la dernière version de The Big Project du référentiel, puis actualiser Gradle Project afin que IDEA puisse voir toutes les nouvelles classes, etc."},{"id":"text-21","heading":"Text","content":"Note importante: La barre pour la configuration par défaut est si élevée car IDEA est tombé en panne lors de l&#39;actualisation et je ne pouvais pas mesurer le temps réel. La mémoire simplement affectée n&#39;était pas suffisante pour effectuer cette opération.\nMais en regardant les trois meilleurs, nous voyons que Big settings a actualisé le projet dans les plus brefs délais, de sorte que la plus grande mémoire affectée aide un peu ici.\njstat -gcutil pour la dernière fois\nIDEA n’ayant pas pu actualiser le projet avec Défaut paramètres, ils ne sont pas inclus dans cette mesure."},{"id":"text-22","heading":"Text","content":"Dans ces derniers graphiques, nous voyons que les différences entre les temps totaux sont assez faibles, mais le simple GC intégral est le plus rapide avec Gros paramètres appliqués. Encore une fois, il semble que Xmx de très grande taille aide un peu plus en termes de réactivité.\nRésumé\nDans cette courte expérience, j&#39;ai essayé de tester tout ce que nous pouvions gagner en personnalisant les paramètres de mémoire d&#39;IntelliJ IDEA. Il semble que même quelques ajustements simples puissent considérablement améliorer les performances de notre IDE et accélérer notre travail. Bien sûr, plus vous affectez de mémoire, plus vous obtiendrez de meilleurs résultats, mais nous utilisons IDE pour de nombreuses applications différentes qui consomment également de la mémoire. Notre objectif devrait donc être de trouver un équilibre entre gain de performance et consommation de mémoire. Je pense que dans la plupart des cas, le réglage Xmx valoriser entre 2g et 3g est la meilleure approche. Si vous avez un peu plus de temps, vous pouvez utiliser jstat et jvisualm pour vérifier l’incidence de la modification de différents indicateurs de machine virtuelle sur les performances et l’encombrement de la mémoire.\nEt vous?\nEt vous? Quelle est votre configuration idea.vmoptions? Avez-vous d&#39;autres moyens d&#39;améliorer les performances d&#39;InteliJ IDEA?"}],"media":{"primary_image":""},"relations":[{"rel":"canonical","href":"https://ipom.fr/2019/06/11/la-seule-et-unique-raison-de-personnaliser-les-parametres-de-memoire-dintellij-idea/"},{"rel":"alternate","href":"https://ipom.fr/2019/06/11/la-seule-et-unique-raison-de-personnaliser-les-parametres-de-memoire-dintellij-idea/llm","type":"text/html"},{"rel":"alternate","href":"https://ipom.fr/2019/06/11/la-seule-et-unique-raison-de-personnaliser-les-parametres-de-memoire-dintellij-idea/llm.json","type":"application/json"},{"rel":"llm-manifest","href":"https://ipom.fr/llm-endpoints-manifest.json","type":"application/json"}],"http_headers":{"X-LLM-Friendly":"1","X-LLM-Schema":"1.1.0","Content-Security-Policy":"default-src 'none'; img-src * data:; style-src 'unsafe-inline'"},"license":"CC BY-ND 4.0","attribution_required":true,"allow_cors":false}