• [^] # Re: Langages modernes

    Posté par . En réponse au journal Gestion des erreurs d’allocation mémoire en C. Évalué à 6.

    Que fera la jvm (par exemple) si elle exécute un algo qui a besoin d'allouer 1 To si la machine peut pas lui fournir ?

    La JVM c'est particulier :)

    La JVM a 2 paramètres de configuration le Xms et le Xmx. Ce sont des paramètres de la JVM pas de ton programme (ton programme peut les voir, mais pas les modifier). Il définissent la taille minimale et maximale de mémoire que ta JVM va pouvoir allouer. au dessus toute allocation va échouer. Il va y avoir une erreur1 OutOfMemomryError qui va être lancée. Avant que cela arrive, tu aura une exécution du full-gc qui aura tenté de libérer (et réorganiser) de la mémoire pour toi. Le message d'erreur généralement associé est assez intéressant : GC overhead limit exceeded. Cela signifie que le full-gc s'exécute sans arriver à libérer significativement de mémoire (on passe trop de temps à exécuter le gc plutôt que ton programme).

    Il y a une autre partie la mémoire out of heap, mais c'est pas commun. Quand tu fais ce genre de choses tu gère toi-même l'allocation et la libération de la mémoire. Cette mémoire n'est pas limité par le Xmx.

    Finalement, je trouve l'approche pas si éloignée2 de ce que certains font ici. Tu fais une distinction entre tes allocations « classiques » (→ de petites) qui ne doivent pas échouer et les allocations grandes (pour ne pas dire énorme) que tu va gérer manuellement.


    1. Une erreur c'est comme une exception d'un type différent. En java, il y a les Throwables qui se divisent en Error et en Exception.

    2. Bien sûr je ne dis pas que c'est identique. Ici il y a un gc, etc.

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)