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

[SOLUCIONADO] Migracion de Swing o Migracion de Java ??

Estas en el tema de Migracion de Swing o Migracion de Java ?? en el foro de Java en Foros del Web. Hola, He realizado una aplicacion en Java utilizando la libreria swing, sin embargo tengo un problema de consumo de memoria que por un lado se ...
  #1 (permalink)  
Antiguo 21/04/2015, 20:18
 
Fecha de Ingreso: agosto-2011
Mensajes: 73
Antigüedad: 12 años, 9 meses
Puntos: 0
Pregunta Migracion de Swing o Migracion de Java ??

Hola,

He realizado una aplicacion en Java utilizando la libreria swing, sin embargo tengo un problema de consumo de memoria que por un lado se debe a que por alguan razon el dispose no me esta liberando memoria al cerrar las ventanas, por lo que mi aplicación esta consumiendo hasta 250 MB de memoria RAM.

Por lo que me planteo migrar, pero no se cual es mejor, Migrar de Swing a Qt o de Java a C++ y QT. En caso de ser la primera, que es mejor comenzar la aplicacion desde cero en QT creator pero utilizando Java o utilizar la libreria QT jambi para Java, lo que realmente me importa es mantener la funcionalidad de la aplicación y que corra sin problemas en todas las plataformas.

Que recomendaciones me hacen ??
  #2 (permalink)  
Antiguo 22/04/2015, 04:43
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Migracion de Swing o Migracion de Java ??

Buenas,

Cita:
Que recomendaciones me hacen ??
Yo te recomiendo que en lugar de migrar a otra tecnologia, arregles tu aplicacion.
No es normal que ocupe tanta memoria, por lo que seguro que estas haciendo algo mal.

Deberias hacer profiling del uso de memoria de la aplicacion. Hay herramientas superavanzadas en java para ello. Si utilizas netbeans el propio IDE incorpora una muy buena: https://netbeans.org/kb/articles/nb-...leaks_pt1.html
Si no, el JDK de java 7 incorpora dos superherramientas: java Mission Control y Java Visual VM que te permiten localizar facilmente donde estas desperdiciando memoria.
https://visualvm.java.net/profiler.html
https://www.prosysopc.com/blog/using...ce-monitoring/

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 22/04/2015, 10:15
 
Fecha de Ingreso: agosto-2011
Mensajes: 73
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Migracion de Swing o Migracion de Java ??

Muchas gracias por tu respuesta, pero igual tengo que migrar a c++.
  #4 (permalink)  
Antiguo 22/04/2015, 10:17
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Migracion de Swing o Migracion de Java ??

Entonces no veo tu pregunta.

Saludos
__________________
Grupo Telegram Docker en Español
  #5 (permalink)  
Antiguo 25/04/2015, 04:34
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años, 1 mes
Puntos: 31
Respuesta: Migracion de Swing o Migracion de Java ??

acuérdate de que puedes usar la papelera de memoria de java (garbage collector). A parte de cuando el programa lo ejecuta de forma automática, también puedes forzar tú cuando quieras el usarlo para liberar el espacio en memoria de los objetos que ya no estén en uso.

Migrar a c++ no te va a arreglar el problema. Si en tu esquema del programa estás manteniendo objetos en memoria que ya no usas, pero que no puedes borrar porque según tu organigrama aún son accesibles... te va a dar igual cambiar de lenguaje, en ese nuevo lenguaje te va a pasar lo mismo.

Ejemplo: Si usas una variable en un único método de una clase que hayas creado tú... no la pongas como variable global en esa clase, sino como variable local del método. Así cuando el método termine de ejecutarse, la variable desaparece. Mientras que si es global seguirá en memoria mientras exista un objeto de dicha clase. Un ejemplo de forma antigua de trabajar y que aún se usa mucho son los POJO (métodos setVariable y getVariable) en el que no se mide para qué se usan dichas variables... y se ponen absolutamente todas como globales. Si un objeto persona tiene el método saltar, la característica impulso vertical es única para ese método saltar, y para ningún otro método. Ni para el método comer, ni andar, ni crecer ni nadar. Solución: busca cosas comunes a todos los métodos o como mínimo para 2 de ellos a través de los cuales puedas deducir las características individuales de los métodos. Por ejemplo fuerzaPiernas como variable global te sirve para deducir las variables locales impulso vertical para saltar, velocidad de movimiento en el agua para nadar y resistencia al cansancio para andar. No importa que uses más o menos variables locales en métodos que utilizarás solo a ratos... porque cuando salgas de la piscina todas las variables locales de nadar desaparecen. Sin embargo es conveniente que te acostumbres a ahorrar variables allá donde puedas, porque hay veces que un objeto, o un método dura más tiempo ejecutándose, o el método está más tiempo en ejecución y por lo tanto todo lo que ese método incluya estará en memoria. Por lo tanto todas sus variables estarán en memoria.

Ejemplo simple de ahorro de memoria:
String variableInnecesaria= "hola";
variableInnecesaria=variableInnecesaria+ " y adiós."
system.out.println (variableInnecesaria);

Ejemplo mejorado:
system.out.println ("hola"+" y adiós");

Yo muchas veces uso variables así para aclararme yo con mi código. Pero una vez que tengo mi código funcionando elimino las variables que veo innecesarias porque se puede usar directamente la operación en la llamada al método, sin usar variables... así ahorro espacio en memoria.

Este ejemplo es muy simple... pero realmente a veces se pueden llegar a ahorrar variables que llegan a ocupar mucho espacio porque almacenan datos provenientes de muchos métodos, objetos, etc... cuando si lo piensas bien te puedes llegar a ahorrar dichas variables, y juntar los distintos datos directamente en el sitio donde usarías la variable que previamente los hubiese juntado.

El resultado sin variables es más lioso de entender. Y si vuelves a tu código sin variables después de un tiempo no te enteras de nada. Pero oye... la solución que yo encontré para eso... es comentar mis propios códigos. Nunca se sabe cuando se van a volver a necesitar ciertas clases, ciertos códigos para futuros programas.

Con respecto a usar un lenguaje u otro... yo no creo que haya un lenguaje universal que se pueda decir que para el 100% de los programas sea el mejor lenguaje. Cada uno va mejor para según su finalidad y el modo y entorno en el que se vaya a usar. Yo no usaría java para un programa de gestión destinado a usarse en clientes que nunca serán otra cosa que Windows y que atacarán a servidores y servicios que nunca serían otra cosa que productos Microsoft. En ese caso usaría .NET. Y java por otro lado tampoco se lleva demasiado bien con imágenes 3D... sin embargo, hay veces en las que java es el lenguaje que mejor se adecúa a tus necesidades. Y una de sus características más decisivas para usar java es que no hay que tocar ni 1 sola línea de código para cambiar de sistema operativo. Ya es la máquina virtual de java la que traduce.

Última edición por Kritik; 25/04/2015 a las 05:52

Etiquetas: c++, migración, swing
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 03:35.