Un reproche régulièrement fait aux langages comme Java ou C# est que la gestion de la mémoire n'est pas effectuée par le programmeur, contrairement au C ou au C++. Le développement est beaucoup plus simple, au prix de l'ajout d'une pièce très lourde à l'exécution : un ramasse-miettes. Celui-ci cherche régulièrement les bouts de mémoire qui peuvent être libérés, car plus utilisés, sans quoi le programme utilise de plus en plus de mémoire et finit par bloquer l'ordinateur. Selon certaines estimations, un programme peut passer jusqu'à une dizaine de pour cent de son temps d'exécution sur le ramasse-miettes ! Certes, cette estimation ne tient pas compte du temps à l'exécution que prendrait une gestion manuelle de la mémoire, mais le chiffre reste intéressant.
Que peut-on faire pour améliorer la situation ? Les processeurs actuels ne sont pas vraiment prévus pour les opérations de nettoyage de la mémoire. Une idée est d'ajouter un petit coprocesseur qui exécuterait uniquement le ramasse-miettes. Ce dernier pourrait n'utiliser que peu de transistors et d'énergie, mais aussi s'exécuter en parallèle. Il pourrait aussi être intégré au plus proche de la mémoire, ce qui diminuerait la consommation d'énergie en transfert de données.
Selon les tests effectués (un tel accélérateur intégré à un processeur RocketChip RISC-V), une telle puce pourrait être utilisée pour des ramasse-miettes bloquants ou non. En l'utilisant dans une machine virtuelle Java (JikesRVM), il serait possible d'accélérer les opérations de gestion de la mémoire d'un facteur quatre ! La réduction de consommation d'énergie, avec ce prototype, est de quinze pour cent, en utilisant moins de vingt pour cent de la surface d'un cœur de calcul.
Voir aussi : A Hardware Accelerator for Tracing Garbage Collection.
Source : For Better Computing, Liberate CPUs From Garbage Collection.
Partager