09/11/2013, 03:51
|
| 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. |