Il y a BEAUCOUP à dire en prenant le temps de tester les différents paramètres de ramasse-miettes, mais comme cela a été mentionné ci-dessus, il n'est généralement pas utile de le faire.
Je travaille actuellement sur un projet impliquant un environnement limité en mémoire et une quantité relativement importante de données - il y a quelques gros morceaux de données qui poussent mon environnement à sa limite, et même si j'ai pu réduire l'utilisation de la mémoire alors qu'en théorie cela devrait fonctionner très bien, j'obtiendrais toujours des erreurs d'espace de tas --- les options GC détaillées m'ont montré qu'il essayait de ramasser des ordures, mais en vain. Dans le débogueur, je pourrais exécuter System.gc () et bien sûr il y aurait "beaucoup" de mémoire disponible ... pas beaucoup de plus, mais assez.
Par conséquent, la seule fois où mon application appelle System.gc (), c'est lorsqu'elle est sur le point d'entrer dans le segment de code où les grands tampons nécessaires au traitement des données seront alloués, et un test sur la mémoire disponible disponible indique que je ne suis pas garanti de l'avoir. En particulier, je regarde un environnement de 1 Go où au moins 300 Mo sont occupés par des données statiques, la majeure partie des données non statiques étant liées à l'exécution, sauf lorsque les données en cours de traitement sont d'au moins 100 à 200 Mo à la source. Tout cela fait partie d'un processus de conversion automatique des données, donc les données existent toutes pour des périodes de temps relativement courtes à long terme.
Malheureusement, alors que les informations sur les différentes options pour régler le ramasse-miettes sont disponibles, cela semble en grande partie un processus expérimental et les détails de niveau inférieur nécessaires pour comprendre comment gérer ces situations spécifiques ne sont pas faciles à obtenir.
Tout cela étant dit, même si j'utilise System.gc (), j'ai continué à régler en utilisant les paramètres de ligne de commande et j'ai réussi à améliorer le temps de traitement global de mon application de manière relativement significative, malgré mon incapacité à surmonter le pierre d'achoppement posée par le travail avec les plus gros blocs de données. Cela étant dit, System.gc () est un outil ... un outil très peu fiable, et si vous ne faites pas attention à la façon dont vous l'utilisez, vous souhaiterez qu'il ne fonctionne pas plus souvent qu'autrement.