Ver Mensaje Individual
  #2 (permalink)  
Antiguo 09/11/2013, 03:51
Avatar de chuidiang
chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 1 mes
Puntos: 454
Respuesta: Parsear un archivo de texto

Hola:

"cientos de cadenas", pongamos 900 para que no sean miles. Las cadenas más larqa que has puesto tiene 142 caracteres, pongamos 200 para redondear, quedan 900x200= 180000 caractes. En java un caracter son 2 bytes, asi que tenemos 360000 bytes, no llega a medio mega.

El heap por defecto de java es de 128 megas, del cual estás gastando medio mega. No creo que el problema de falta de espacio venga por temas de cadenas.

Habitualmente, el heap se sobrepasa por dos motivos:
- Cantidad ingente de datos o programas java muy grandes. Echa una cuenta con los datos que manejas en memoria para ver si al menos se aproxima a esos 128 Megas.
- Algún error que provoca llamada recursiva a métodos sin fin. Por ejemplo, si en un método() prentendes llamar a super.metodo() y te olvidas de poner super, el método se llama a si mismo hasta el infinito, o recursiones en que la salida de la recursión está fallando. O algún bucle que almacena datos y no termina nunca (por ejemplo, en tu caso podría ser algo como procesar una y otra vez la misma línea del fichero por algún fallo).

Para el primer caso, basta con dar más memoria al arrancar la máquina virtual, por ejemplo

java -Xmx512m ....

haría que tuvieras 512 megas en vez de 128.

Esta solución no sirve en el segundo caso, si tienes un problema de llamadas recursivas o de almacenamiento infinito de datos por algún error, al aumentar la capacidad de memoria, el error tardará un poco más en darse pero seguirá dándose.

Se bueno.
__________________
Apuntes Java
Wiki de Programación