Sans cela j'avais un grand nombre de major collection [...]
Il y a un outillage autour d'Ocaml pour mesurer ce genre de choses ?
Le tas est composé de deux memory pool : une minor heap et une major heap. La première sert pour les objets à courte durée de vie et est très efficace pour ce qui concerne les temps d'allocation et de désallocation mémoire. Lorsqu'elle est pleine le GC nettoie et transfert les structures encore en vie vers la major heap, puis à chaque fois qu'il fait cela, il nettoie par tranche cette major heap (de manière incrémentale) : c'est ce processus en mode stop the world qui prend plus du temps et génère de la latence. Dans mon code, j'ai adapté la gestion de la mémoire pour ne pas y avoir recours. Cela se passe en trois temps
C'est très intéressant (merci !). En fait c'est un gc générationnel assez classique :)
Ce qui est marrant c'est ta solution (en tout cas pour moi). Dans le monde JVM, on va plutôt essayer de faire passer ses objets dans une vielle génération et à limiter la création de nouveaux objets. Pour ça on va utiliser un pool d'objets, que l'on va réutiliser autant que possible. Ainsi on se protège des problèmes de débit réduisant la pression sur le débit (il y a d'autres gains potentiels comme le fait de réduire la fragmentation mémoire).
Il est possible de jouer sur les tailles de génération de la JVM, mais ça se fait de manière externe. Ce sont des paramètres à passer à la JVM :
-XX:NewRatio= pour indiquer le ratio entre la young et la old génération
-XX:NewSize= taille minimale de la young génération
-XX:MaxNewSize=size taille maximale de la young génération
Du coup c'est des paramètres pour toute la JVM sur toute sa durée de vie. Tu ne peux pas régler ça pour une partie de ton programme.
D'ailleurs comment se passe une redéfinition plus petite de la minor heap en Ocaml ? Il fait un stop the world et envoie tout ce qu'il faut dans la major heap ?
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: On s'en bat le steak
Posté par barmic . En réponse au journal Typage statique pour Python. Évalué à 2.
Il y a un outillage autour d'Ocaml pour mesurer ce genre de choses ?
C'est très intéressant (merci !). En fait c'est un gc générationnel assez classique :)
Ce qui est marrant c'est ta solution (en tout cas pour moi). Dans le monde JVM, on va plutôt essayer de faire passer ses objets dans une vielle génération et à limiter la création de nouveaux objets. Pour ça on va utiliser un pool d'objets, que l'on va réutiliser autant que possible. Ainsi on se protège des problèmes de débit réduisant la pression sur le débit (il y a d'autres gains potentiels comme le fait de réduire la fragmentation mémoire).
Il est possible de jouer sur les tailles de génération de la JVM, mais ça se fait de manière externe. Ce sont des paramètres à passer à la JVM :
-XX:NewRatio=pour indiquer le ratio entre la young et la old génération-XX:NewSize=taille minimale de la young génération-XX:MaxNewSize=sizetaille maximale de la young générationLa doc est là pour ceux qui ça intéressent : https://docs.oracle.com/cd/E19900-01/819-4742/abeik/index.html
Du coup c'est des paramètres pour toute la JVM sur toute sa durée de vie. Tu ne peux pas régler ça pour une partie de ton programme.
D'ailleurs comment se passe une redéfinition plus petite de la minor heap en Ocaml ? Il fait un stop the world et envoie tout ce qu'il faut dans la major heap ?
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)