Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/02/2007, 10:00
senseten
 
Fecha de Ingreso: febrero-2006
Mensajes: 35
Antigüedad: 18 años, 3 meses
Puntos: 0
Mensaje java.lang.OutOfMemoryError: Java heap space

Me gustaria saber cual es la mejor solucion para mi problema. Tengo un programa en java que se comunica con una base de datos MySQL y SQLServer. Una de sus funciones es replicar una tabla de MySQL en una base de datos de SQLServer, pero como esta tabla contiene unos 500.000 registros (cabe destacar que esta tabla crece cada vez mas) me da un error de que JVM no tiene suficiente memoria cuando selecciono todos sus datos. Al ver este error hice una procedimiento que va tomando mas memoria a medida que JVM se queda sin ella el codigo es el siguiente:

public static void flushMemory()
{
//Usamos un vector para almacenar la memoria.
Vector v = new Vector();
int count = 0;
//inicialmente incrementamos en bloques de 1 megabyte
int size = 60048576;
//Continuaremos hasta que pediremos bloques de
//1 byte
while(size > 1)
{
try
{
for (; true ; count++)
{
//pedir y almacenar más memoria
v.addElement( new byte[size] );
}
}
//Si encontramos un OutOfMemoryError, seguimos
//intentando obtener más memoria, pero en bloques de
//la mitad de tamaño.
catch (OutOfMemoryError bounded)
{
size = size/2;
}
}
//Ahora liberamos todo para el GC
v = null;
//y pedimos un nuevo Vector como un pequeño objeto
//para asegurarnos que se lanza la recolección de basura
//antes de salir del método.
v = new Vector();
}

y el procedimiento que lo llama

try
{
while (resultado==null)
{
try
{
sentencia = conexion.createStatement();
resultado = sentencia.executeQuery(query);
}
catch(OutOfMemoryError e)
{
System.out.println("Se quedo sin memoria "+e);
flushMemory();
resultado = null;
}
}
return resultado;
}
catch(SQLException e)
{
System.out.println("Error al realizar la consulta "+e);
return resultado;
}
con esto igualmente no logro hacerlo funcionar.
Mi pregunta es si la unica solucion (y la mejor) es varios select para luego hacer los insert de esos select.