Java, garbage collection, -Xmx et autres ulimit...

Est-ce que la limite memoire de java est controllee par un -Xmx, ou c'est simplement un ulimit au niveau du shell ?

Cas -Xmx:

Je n'ai pas reussi a catcher une exception OutOfMemory, donc il ne me semble pas que ce soit ce mecanisme qui soit utilise.

Cas ulimit:

En ce cas, il parait difficilement possible de reussir a coder en java (sauf a faire du C en java), vu que new va allouer de la memoire dans la limite du -Xmx passe en argument lors du lancement de la machine virtuelle avant de faire un garbage collect (je simplifie un peu, la, mais c'est le principe).

Si je pouvais avoir une reponse rapidement, histoire d'avoir le temps de refaire le 4 et 5 en C...

4 jan. 2016 à 21:55:52 Modifié le 4 jan. 2016 à 22:02:56

Ca parait mal parti pour le java:

1
2
3
4
5
6
7
8
9
public class Main
{
    public static void main(String[] args)
    {
        Integer t[] = new Integer[100];
        for (int i=0;i!=100000000;i++)
            t[i%100] = new Integer(i);
    }
}

echoue pour depassement memoire, alors qu'il n'utilise qu'un tableau et 100 entiers a la fois.

Les regles devraient preciser java sans utiliser new (ou le garbage collector) :-)

Merci de nous avoir reporté ce problème. Le problème est le suivant : nous lançons java avec un -Xmx qui a la même taille que la limite de mémoire, ce qui fait que le GC de Java pense qu'il peut utiliser toute cette mémoire alors que notre programme le tue avant. Nous allons rapidement corriger le problème en mettant une taille maximale du tas plus basse. Cela devrait aider pas mal de candidats qui font du Java ! :-)

Temps de temps à essayer de comprendre les problèmes de mémoire ... j'arrive trop tard pour corriger mes programmes, mais merci !

Répondre au sujet

Vous devez vous enregistrer ou vous connecter pour poster des messages.