elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  GC overhead limit excedeed (java heap space excedida)[SOLUCIONADO]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: GC overhead limit excedeed (java heap space excedida)[SOLUCIONADO]  (Leído 2,965 veces)
Eskizoide

Desconectado Desconectado

Mensajes: 13


Ver Perfil
GC overhead limit excedeed (java heap space excedida)[SOLUCIONADO]
« en: 29 Abril 2018, 14:15 pm »

Buenas, estoy trabajando en un problema el cual ya tengo resulto y funcionando con instancias pequeñas, pero al cual cuando le paso un fichero más grande no termina de ejecutarse, acaba saltando un error de "GC overhead limit excedeed" y por más que le aumento la memoria a eclipse sigue fallando, además de que me he puesto la barrita esta en la que ves el heap space que tienes y nunca llega ni a la mitad, y me está molestando un poquito ya porque me estoy quedando atascado aquí cuando lo difícil era resolver el problema. Pongo aquí el código y el error que me dió a ver si alguien puede ayudarme, ¿quizá el problema está en los objetos que creo en la función listPermutations?

He puesto en negrita las líneas que saltan error y donde creo que debe estar el problema

Error:

Código:
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.util.Arrays.copyOf(Unknown Source)
at java.util.ArrayList.toArray(Unknown Source)
at java.util.ArrayList.<init>(Unknown Source)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:117)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.listPermutations(HiddenNumbers.java:114)
at SegundoReto.HiddenNumbers.calculatePossibilities(HiddenNumbers.java:59)
at SegundoReto.HiddenNumbers.calculateNumbers(HiddenNumbers.java:45)
at SegundoReto.HiddenNumbers.<init>(HiddenNumbers.java:29)
at SegundoReto.HiddenNumbers.main(HiddenNumbers.java:130)

Y aquí el código:

Código:
package SegundoReto;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class HiddenNumbers {
private String inputFile;
private Scanner reader;
private FileReader fileReader;
private List<Integer> numeros = new ArrayList<Integer>();
private ArrayList<Integer> resultados;
private BufferedWriter writer;

public HiddenNumbers(String fileName) throws IOException {
this.inputFile = fileName;
try {
fileReader = new FileReader(inputFile);
reader = new Scanner(new File(inputFile));
writer = new BufferedWriter(new FileWriter("src/output.txt"));
calculateNumbers();

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public void calculateNumbers() throws IOException {
int limit = Integer.parseInt(reader.nextLine());
for (int i = 1; i <= limit; i++) {
resultados = new ArrayList<Integer>();
int k = 1;
String currentWord =  reader.nextLine();
if (currentWord.length() > 26 | currentWord.length() < 2) System.out.println("Error.La palabra solo puede tener una longitud entre 2 y 26");
else {
writer.write("Case #" + i + ": " + calculatePossibilities(currentWord, k));
writer.newLine();
 }
}
System.out.println("Programa finalizando..");
writer.close();
reader.close();
}

public int calculatePossibilities(String palabra, int k) {
int valor = 0;
for (int i=0; i<palabra.length();i++) {
numeros.add(i);
}
List<List<Integer>> myLists = listPermutations(numeros);

   for (List<Integer> al : myLists) {
    if (al.get(0) == 0) {
           continue;
       }
   
    resultados.add(calculateValue(al));
    /**
       String appender = "";
       for (Integer i : al) {
           System.out.print(appender + i);
           appender = "";
       }
       System.out.println();
       **/
   }
   valor = calculateMinMax(resultados);
   return valor;
}

public int calculateMinMax(ArrayList<Integer> results) {
int max = Collections.max(results);
int min = Collections.min(results);
//System.out.println("El máximo es: " + max + " y el mínimo es " + min);
return (max-min);
}

public int calculateValue(List<Integer> lista) {
System.out.println("La lista es: " + lista + " y tiene un tamaño de " + lista.size());
int exponente= lista.size()-1;
int base = lista.size();
int valor = 0;
//System.out.println("La base es :" + base + " y el exponente es " + exponente);
for (int i = 0;i<lista.size();i++) {
//System.out.println("Vamos a multiplicar " + lista.get(i) + " por " + base + " elevado a " + exponente);
valor += lista.get(i) * (int) Math.pow(base, exponente);
exponente--;
}
System.out.println("Uno de los posibles valores para " + lista + " es " + valor);
return valor;
}

public static List<List<Integer>> listPermutations(List<Integer> list) {

   if (list.size() == 0) {
       List<List<Integer>> result = new ArrayList<List<Integer>>();
       result.add(new ArrayList<Integer>());
       return result;
   }

   List<List<Integer>> returnMe = new ArrayList<List<Integer>>();

   Integer firstElement = list.remove(0);

  [b] List<List<Integer>> recursiveReturn = listPermutations(list);[/b]
   for (List<Integer> li : recursiveReturn) {
       for (int index = 0; index <= li.size(); index++) {
           [b]List<Integer> temp = new ArrayList<Integer>(li);[/b]
           temp.add(index, firstElement);
           returnMe.add(temp);
       }

   }
   return returnMe;
}



public static void main(String[] args) throws IOException {

HiddenNumbers hiddenNumbers = new HiddenNumbers("src/testInput2.txt");
}

}

Y por si alguno lo puede probar en su equipo, aquí les dejo al fichero que le estoy pasando al programa para que trabaje con el:

Citar
100
cojhn
qkflsczuantb
qswagdzcpxe
dxwupsqhknfciozgbrtjma
wjxgnyzvbakimqfdt
qmyf
ma
mvongxtqdypsbfjzlhruc
bfujhpnxdgyilowcrqkm
mpuzgkwe
vd
bxdpcirwkvanzmefogsyj
alejmqt
urmnskcjhl
ogqmnte
mqoldkhwfryjutpv
nupolktzdmsv
kvxoecmgnrzuayptjidbwl
cyafdkgivrxpeujhozbm
htfdxycnkserjiz
kxypedsbvhzgfuoqi
htlfusmrvadckgenxiwbzqj
qcjktbhywnoxslrfauzdepmvg
obewgiahkctxmlpsjfnv
fickmtolqndzwvpasreuxb
hxptymkzgbwanvcjedfqoiursl
kogxc
sgomyxhda
lkspxtcweziybaqovhurjfgd
xiokcnydbmjqvu
yxkdanuzwmlerihjcvqpfstb
yneltcsbvwqukdagfjmzx
ofnhgquxiyvwck
ywxzmuvalbscdk
sdp
kozubhaepcw
nbiqztdj
saonctfgjdbkqu
yqomxjedrztbwislvuanphcf
lchrn
hmovs
dfpxhelagvcmoyzbukr
bwmfn
uv
ukbvzfgsnlhxe
rpfhaxoisblezqwydgcuk
cmnjgh
sjx
ivn
kxqwvrlsthfjbngcd
fdx
qkaublyrvpdx
qzcmy
gpjkilhxnou
lxocdniryftqea
fsro
zmajgdihurkoblscnwpqfvxye
ewimuqoxrtcbgf
hqcvrbkmgeindyfszjupaolt
rjstoynlmuvhgebqcpfx
ghymxufkzrdnolitvwep
psvwmuxthdoejcbgkqif
fduvzonmhiglrbcqpetjkx
bnxlckrjhvowmzid
eqy
uwg
ghitqjnslvcpuzwrxbyod
irkwajhnfpmezdgsvutlcoq
ql
vclwinjbteuszfmydokraxpqh
swocbamnhvkuxltrip
dgjyup
ewudxyjlrbs
xmkiawcrfjvhg
rewfybacgpdhvkmqiun
nizrgevt
edxqvj
rzgbp
kxehpdfya
iasdkolztwfgm
lgijk
gyoxqfrhs
agjdluecbohtwqkmxrfpiv
zjgtlyuiwnvkbefrpax
dc
hckpivxoarlsbujfeywgmqtd
bwun
xsiyt
vwygmtho
kjidpnqsmxahglocbztfeuwyr
ialwcbtexghnqmkrdz
qihwso
mnsebatdxzol
xifhogvmbndztueqpalsyj
ry
emvdqkflowijgytcxzaubsr
jhbysenmzoqvluxfpcdw
lipdnmqecousxfrjv
xdzerwgqf
ctubdnxerwiplqgfovahzjyksm

Mil gracias si alguien puede ayudarme, de verdad!!! un saludo


« Última modificación: 29 Abril 2018, 22:13 pm por Eskizoide » En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.348


Ver Perfil
Re: GC overhead limit excedeed (java heap space excedida) [ECLIPSE]
« Respuesta #1 en: 29 Abril 2018, 19:54 pm »

Solo  he mirado el código por encima, y...
...en cuanto he visto que tratas de crear permutaciones y que el tamaño de palabra le dejas hastas 26 caracteres... me basta.

Ahora te pregunto: serías capaz de decirme cuantas permutaciones totales resultan para un alfabeto de 26 letras + 10 cifras (un alfabeto de 36 caracteres), para palabras de 26 caracteres de largo?. Y una vez calculado el número de permutaciones, multiplícalo por 26, para saber los bytes que ocupará en memoria/disco...

Cuando me digas el resultado, y me cuentes que pretendes que quepa en la memoria de tu equipo, confío que tú mismo entiendas la raíz del problema...

Pásate por este hilo, para responder a tus preguntas y hacer algo eficaz.
https://foro.elhacker.net/abril_negro/abril_negro_spok_simple_production_of_keys-t468239.10.html



En línea

Eskizoide

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: GC overhead limit excedeed (java heap space excedida) [ECLIPSE]
« Respuesta #2 en: 29 Abril 2018, 22:13 pm »

Solo  he mirado el código por encima, y...
...en cuanto he visto que tratas de crear permutaciones y que el tamaño de palabra le dejas hastas 26 caracteres... me basta.

Ahora te pregunto: serías capaz de decirme cuantas permutaciones totales resultan para un alfabeto de 26 letras + 10 cifras (un alfabeto de 36 caracteres), para palabras de 26 caracteres de largo?. Y una vez calculado el número de permutaciones, multiplícalo por 26, para saber los bytes que ocupará en memoria/disco...

Cuando me digas el resultado, y me cuentes que pretendes que quepa en la memoria de tu equipo, confío que tú mismo entiendas la raíz del problema...

Pásate por este hilo, para responder a tus preguntas y hacer algo eficaz.
https://foro.elhacker.net/abril_negro/abril_negro_spok_simple_production_of_keys-t468239.10.html



Justo venía a decir que el problema era que no me había parado a pensar en el número de combinaciones posibles. Ya lo solucioné así que se puede cerrar. Gracias!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Java heap space
Java
DiTeN 4 7,393 Último mensaje 16 Septiembre 2009, 15:36 pm
por Debci
Space invaders java
Java
bartvander 5 6,268 Último mensaje 11 Abril 2012, 17:50 pm
por 1mpuls0
Space invaders java
Java
bartvander 0 3,125 Último mensaje 7 Marzo 2012, 15:19 pm
por bartvander
MOVIDO: Space invaders java
Programación General
Aprendiz-Oscuro 0 1,872 Último mensaje 7 Marzo 2012, 20:09 pm
por Aprendiz-Oscuro
Duda con heap, stack
Programación C/C++
SARGE553413 9 5,779 Último mensaje 10 Enero 2014, 13:55 pm
por SARGE553413
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines