Java heap space
beta
-
beta -
beta -
Bonjour,s'il vous plait aider moi de corriger l'erreur "java.lang.OutOfMemoryError: Java heap space".j'utilise java 8
je besoin de récupérer la liste de tous les combinaison pour utilise dans la suite
import java.util.ArrayList; public class A { static ArrayList<int[]> permutations(int[] a) { ArrayList<int[]> ret = new ArrayList<int[]>(); //Consumer<int[]>ret=new Consumer<int[]>(); permutation(a, 0, ret); return ret; } /*public void permutation(int[] arr, int pos, Consumer<int[]> consumer) { if (arr.length - pos == 1) consumer.accept(arr); else for (int i = pos; i < arr.length; i++) { swap(arr, pos, i); permutation(arr, pos + 1, list); swap(arr, pos, i); } }*/ public static void permutation(int[] arr, int pos, ArrayList<int[]> list) { if (arr.length - pos == 1) list.add(arr.clone()); else for (int i = pos; i < arr.length; i++) { swap(arr, pos, i); permutation(arr, pos + 1, list); swap(arr, pos, i); } } public static void swap(int[] arr, int pos1, int pos2) { int h = arr[pos1]; arr[pos1] = arr[pos2]; arr[pos2] = h; } public static void main(String[] args) throws java.lang.Exception { int[] a = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29, 30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60}; ArrayList<int[]> list = permutations(a); for (int[] s : list) { for (int i : s) { System.out.print(i+","); //G1.add(i); } System.out.println(); } } }
je besoin de récupérer la liste de tous les combinaison pour utilise dans la suite
A voir également:
- Java heap space
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Space monger - Télécharger - Optimisation
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
Le calcul est facile, si n est la taille du tableau de départ, il y aura très exactement n! résultats dans la liste. Sachant que chaque résultat est un tableau de taille n, ça nous fait donc environ n*n! entiers à stocker.
On multiplie ça par 4 octets chacun, j'oublie volontairement la taille du tableau et de la liste parce que c'est plus dur de les calculer, mais en gros il faut multiplier encore par 1.5 disons donc environ 6*n*n! octets en mémoire.
Pour n=10, environ 200 Mo.
Pour n=11, environ 2,5 Go
Pour n=12, environ 32 Go
Pour n=60, environ 1,5 TTTTTTTo (téra de téra de téra... de téra octets)
Remarque : pour n=10 mon ordinateur a mis à peu près 1 seconde pour faire le calcul, donc pour n=60 on pourrait attendre un résultat d'ici...
435 000 GGGGGGG années (milliards de milliards ... de milliards d'années)
De toute façon, tu aurais eu un ArrayOutOfBoundsException bien avant car une ArrayList ne peux pas contenir plus de 2^31-1 valeurs. Donc même si tu avais 450 Go de mémoire tu ne pourrais pas faire le calcul pour n=13...
Mais je ne vois pas l'intérêt d'avoir toutes les combinaisons possibles.