Foros del Web » Programación para mayores de 30 ;) » Java »

ayuda en java plisssss

Estas en el tema de ayuda en java plisssss en el foro de Java en Foros del Web. Hola a todos tengo una aplicacion hecha en java para hacer facturas y contabilidad pero tengo un problema. cuando la gente enpiesa a trabajar en ...
  #1 (permalink)  
Antiguo 17/05/2006, 15:58
 
Fecha de Ingreso: mayo-2004
Ubicación: SurOeste de Guayaquil
Mensajes: 241
Antigüedad: 20 años
Puntos: 0
De acuerdo ayuda en java plisssss

Hola a todos

tengo una aplicacion hecha en java para hacer facturas y contabilidad
pero tengo un problema.

cuando la gente enpiesa a trabajar en sistema empiesa muy bien pero al pasar de las horas se comienza a poner lento y hasta veces se congela el sistema no se que sera y cual es el problema que tiene java ....

pero solo pasa con el sistema si abro otro programa como word si lo puedo hacer
espero que me puedan ayudar con esto le estare agradecido
__________________
javier
  #2 (permalink)  
Antiguo 17/05/2006, 16:20
 
Fecha de Ingreso: marzo-2006
Mensajes: 61
Antigüedad: 18 años, 1 mes
Puntos: 0
De acuerdo

Lo que puede pasar es que ud trabaja con SWing y crea frame, capaz que como crea muchos frame altiro, los deja activado. Vea eso, sino tiene que ver en que modulos se pone mas lento, capaz que sea la conexion a la BD cuando realiza una accion, ya que como es un programa de Contabilidad.

Esop

Patricio
  #3 (permalink)  
Antiguo 17/05/2006, 16:53
 
Fecha de Ingreso: mayo-2004
Ubicación: SurOeste de Guayaquil
Mensajes: 241
Antigüedad: 20 años
Puntos: 0
gracias por tu respuesta pero no se usa frame si no con internalFrame y no creo que al abrir varias ventanas aga lento al sistema y la conexion a la base no es ....
__________________
javier
  #4 (permalink)  
Antiguo 18/05/2006, 03:45
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Hola:

El abrir ventanas puedes fastidiar si no se hace bien. Procura reaprovechar las ventanas, no hagas new cada vez que quieras abrir una.

Las ventanas que quieres que realmente se liberen, llama al método dispose() de dicha ventana. No estaría de más que en dichas ventanas redefinas el método finalize() y pongas un System.out para verificar que efectivamente el recolector de basura las está librerando.

El problema puede no ser sólo de las ventanas. Si usas java 5, en el directorio bin tienes una aplicación que se llama jconsole. Esta se enchufa a otra aplicacion java que esté corriendo y puedes visualizar su consumo de memoria y demás. Ahí podrás ver si se están creando muchos objetos sin liberar, etc, etc.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 19/05/2006, 07:40
 
Fecha de Ingreso: mayo-2004
Ubicación: SurOeste de Guayaquil
Mensajes: 241
Antigüedad: 20 años
Puntos: 0
y en que parte lo pondria el finalize dentro de mi aplicacion
__________________
javier
  #6 (permalink)  
Antiguo 19/05/2006, 15:40
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Hola:
El finalize es sólo para la prueba. Hereda de los componentes que sospeches que pueden no liberarse (JFrames y JDialgos son buenos candidatos) y defíneles ese método. Cuando el recolector los libera, llama a ese método y verás la salida en pantalla. Si no los libera, el método no se llama y no verás nada.
Ese método pertenece a la clase Object, así que debes redefinirlo tal cual.
De todas formas, antes de hacer esto, echa un ojo con el JConsole que te comenté o si no prueba a bajarte programas de profiler (como JProfiler o jmp).

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #7 (permalink)  
Antiguo 20/05/2006, 08:26
 
Fecha de Ingreso: mayo-2004
Ubicación: SurOeste de Guayaquil
Mensajes: 241
Antigüedad: 20 años
Puntos: 0
y no podrias ayudarme con ejemplo donde uses este metodo finalize()
disculpa lom que pasa es que no entiendo muy bien el uso de este metodo
__________________
javier
  #8 (permalink)  
Antiguo 20/05/2006, 09:50
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Hola:

Simplemente esto:

Código:
public class MiDialogo extends JDialog
{
   protected void finalize()
   {
      System.out.println ("Se libera JDialog");
   }
}

// En algún sitio
MiDialogo dialogo = new MiDialogo();

// cuando quieras liberarlo
dialogo.dispose();
dialogo=null;
Si el recolector de basura realmente libera el dialogo, se debería escribir en pantalla "se libera JDialog". Si no lo ves, es que no lo ha liberado y se queda consumiendo memoria. Debes revisar si te quedan referencias al dialogo en algún sitio, desuscribirlo de sitios posibles donde lo hayas suscrito, etc.

De todas formas, esto sólo si haces new MiDialogo() con frecuencia (por ejemplo, cada vez que se apriete determinado botón). Si sólo haces un par de new no merece la pena revisarlo.

E insisto, si quieres algo más serio, usa el JProfiler, el jmp o el JConsole. Esto te dará una idea rápida de qué clases no se liberan (si es que las hay) y no tendrás que andar dando palos de ciego a ver qué clase no se libera.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #9 (permalink)  
Antiguo 23/05/2006, 10:42
 
Fecha de Ingreso: mayo-2004
Ubicación: SurOeste de Guayaquil
Mensajes: 241
Antigüedad: 20 años
Puntos: 0
pero tengo una duda le pudo System.out.println("mensaje") dentro del metodo finalize()
hay momentos me escribe el mensaje cuando cierro la ventana y a veces no
y en a momento me muestra todos los mensajes anteriores que deberian haber salido no se por que ......
Gracias de antemano
__________________
javier
  #10 (permalink)  
Antiguo 23/05/2006, 12:02
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
La maquina virtual y la especificación no garantizan que se llame a finalize en ningun momento en concreto o incluso que se le llame antes de que la JVM termine, asi que es normal que no te aparezcan mensajes ya que la JVM en realidad no tiene "ningun motivo" para limpiar un objeto antes de cerrarse, puesto que no necesita espacio.

Para detectar objetos consumiendo memoria lo único que hay es revisar el código y utilizar herramientas como las que te menciona chuidiang (memory profilers). El finalize() no es algo que la mayoría de programadores deba usar.
  #11 (permalink)  
Antiguo 23/05/2006, 16:49
 
Fecha de Ingreso: mayo-2004
Ubicación: SurOeste de Guayaquil
Mensajes: 241
Antigüedad: 20 años
Puntos: 0
si tu me dices que no debo usar el finalize() entonces que me aconsejas que debo de hacer en codigo que tengo para poder dar una solucion al problema que tengo
__________________
javier
  #12 (permalink)  
Antiguo 24/05/2006, 10:45
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
La cuestion es que normalmente el que la aplicación se enlentezca es debido a un consumo excesivo de memoria que no se libera como toca, y la única solución es revisar tu programa y averiguar donde estas consumiendo memoria y no liberándola.
Y para eso no hay nada más que lo que te dijo chuidiang:
Cita:
Iniciado por chuidiang
E insisto, si quieres algo más serio, usa el JProfiler, el jmp o el JConsole. Esto te dará una idea rápida de qué clases no se liberan (si es que las hay) y no tendrás que andar dando palos de ciego a ver qué clase no se libera.
Es algo muy concreto y especifico de cada programa y desde aqui no lo podemos hacer por ti. Si es por trabajo y corre prisa, lo mejor es buscar un experto para que lo haga in-situ.
  #13 (permalink)  
Antiguo 24/05/2006, 13:14
 
Fecha de Ingreso: mayo-2004
Ubicación: SurOeste de Guayaquil
Mensajes: 241
Antigüedad: 20 años
Puntos: 0
ok Gracias por tu respuesta
__________________
javier
  #14 (permalink)  
Antiguo 24/05/2006, 13:54
 
Fecha de Ingreso: mayo-2004
Ubicación: SurOeste de Guayaquil
Mensajes: 241
Antigüedad: 20 años
Puntos: 0
el Jprofiler me pide License Key tienes la clave apoyame con esto plissss
__________________
javier
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:07.