Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur java.lang.OutOfMemoryError

    20 septembre 2019 à 22:08:26

    Bonjour,

    Je sais que c'est une question commune, mais je dois dire que les solutions habituelles ne fonctionnent pas et je ne comprends pas pourquoi.

    Tout d'abord voilà ma version de java :

    $ java --version
    openjdk 11.0.4 2019-07-16
    OpenJDK Runtime Environment (build 11.0.4+11-post-Ubuntu-1ubuntu218.04.3)
    OpenJDK 64-Bit Server VM (build 11.0.4+11-post-Ubuntu-1ubuntu218.04.3, mixed mode, sharing)

    Ensuite voilà le code que je chercher à faire tourner :

    public class Main
    {
        public static void main(String[] args)
        {
            final int n = 10000;
    
            double A[][] = new double[n][n];
            double B[][] = new double[n][n];
            double S[][] = new double[n][n];
    
            int i,j;
    
            for (i = 0; i<n; i++)
            {
                for (j = 0; j<n; j++)
                {
                    A[i][j] = 1.0 / ((double) i*j);
                    B[i][j] = 1.0 / ((double) i*j);
                }
            }
    
            // Somme
            for (i = 0; i<n; i++)
            {
                for (j = 0; j<n; j++)
                {
                    S[i][j] = A[i][j] + B[i][j];
                }
            }
        }
    }

    Autrement dit une bête somme de deux matrices. Pourtant voilà ce qu'il se passe une fois lancé après compilation :

    $ java Main
    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    	at Main.main(Main.java:10)
    

    Après recherche, je trouve la solution d'augmenter la RAM autorisée pour la JVM en utilisant le flag -Xmx, voilà donc et ça ne fonctionne pas non plus :

    $ java Main -Xmx2048m
    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    	at Main.main(Main.java:10)

    Ou encore :

    $ java Main -Xms1024m -Xmx2048m
    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    	at Main.main(Main.java:10)
    

    Pourtant je ne crois pas me tromper si je dis que les variables de ce code prennent à peine 3x8x10000 o = 240 000 o environ en négligeant les entiers, c'est à dire bien moins que les 2048 Mo que je suis sensé allouer avec mes flags... (J'ai 8Go de RAM sur mon pc)

    Est-ce que quelqu'un a une idée de pourquoi j'ai quand même cette erreur ? Et comment y remedier ?

    Merci d'avance et bonne soirée

    -
    Edité par Anthony Gerber-Roth 20 septembre 2019 à 22:09:14

    • Partager sur Facebook
    • Partager sur Twitter
      23 septembre 2019 à 10:52:25

      Tu oublies que tes matrices ont deux dimensions. Le bon calcul est donc : \(3\times8\times(10000)^2\) soit 2,4 Go...

      -
      Edité par Zachee54 23 septembre 2019 à 10:53:46

      • Partager sur Facebook
      • Partager sur Twitter

      Erreur java.lang.OutOfMemoryError

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown