Java - problemas con el tamaño de mi aplicación

 
Vista:

problemas con el tamaño de mi aplicación

Publicado por Franco (2 intervenciones) el 29/05/2017 20:33:21
Buenas tardes, tengo una aplicación que sería una suerte de Paint donde se pueden dibujar figuras y pegar imágenes, el problema es que al ir poniendo figuras y desplazándolas el tamaño de la aplicación aumenta mucho (al iniciar es de unos 90MB) y luego crece (mas de 600MB) y se incrementa también al mover las figuras aunque la cantidad de figuras no varíe.
Lo que mas me llama la atención es que al borrar y hacer null a todas las figuras el tamaño de la aplicación no se reduce.
¿Que es lo que puede estar pasando? o que puedo hacer para mejorar el código.
Espero haber sido claro con mi explicación.
Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

problemas con el tamaño de mi aplicación

Publicado por Tom (1831 intervenciones) el 29/05/2017 21:00:05
Si crece mucho solamente por mover las figuras, quizás las estés duplicando en lugar de moverlas ...
En todo caso, la jvm va a ir usando memoria hasta alcanzar el límite configurado (por parámetros, o el que tenga por defecto) pero no la va a liberar automáticamente, sino que la conservará para un posible uso posterior.

http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

problemas con el tamaño de mi aplicación

Publicado por Franco (2 intervenciones) el 01/06/2017 14:42:24
Gracias Tom por tu respuesta. Agrego un código que creé para ver que pasaba:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Timer;
import java.util.TimerTask;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
 
public class Prueba extends JPanel{
	int x=0;
	int y=0;
	boolean Graficar = false;
	public Prueba(){
		Timer tiempo = new Timer();//creamos una instancia para el Timer
		TimerTask task = new TimerTask(){
			public void run(){
				x=x+1;
				if(x>1000){
					x=0;
					y=y+10;
				}
                                if(x>100){
					Graficar = true;
				}
				if(y>20){
					Graficar = false;
				}
				repaint();
			}};
	// 	se inicia la animacion
			tiempo.schedule(task,0, 50);
	}
 
	/*----------------------------------------------------------------------------*/
    public void paintComponent(Graphics g) {// metodo para dibujar componentes en Panel   
    	try{
    		super.paintComponent(g);
    		if(Graficar){
    			Graphics2D g2 = (Graphics2D)g;
    			BufferedImage Imagen = ImageIO.read(new File("/Imagenes/images.jpg"));
    			g2.drawImage(Imagen, x +150, y+150, null);
    			BufferedImage Imagen2 = ImageIO.read(new File("/Imagenes/descarga.png"));
    			g2.drawImage(Imagen2, x, y+300, null);
    			BufferedImage Imagen3 = ImageIO.read(new File("/Imagenes/images.png"));
    			g2.drawImage(Imagen3, x, y+500, null);
    			g2.setColor(Color.GREEN); // color de la figura
    			for(int i=0;i<10;i++){
    				int x2 = (int)(Math.random()*1000);
    				int y2 = (int)(Math.random()*1000);
        			g2.fillRect(x2, y2, 100, 100);
        			g2.fillOval(x2+150, y2, 100, 100);
    			}
    			g2.setColor(Color.CYAN); // color de la figura
    			for(int i=0;i<10;i++){
    				int x2 = (int)(Math.random()*1000);
    				int y2 = (int)(Math.random()*1000);
        			g2.fillRect(x2, y2, 100, 100);
        			g2.fillOval(x2+150, y2, 100, 100);
    			}
    			g2.setColor(Color.RED); // color de la figura
    			for(int i=0;i<10;i++){
    				int x2 = (int)(Math.random()*1000);
    				int y2 = (int)(Math.random()*1000);
        			g2.fillRect(x2, y2, 100, 100);
        			g2.fillOval(x2+150, y2, 100, 100);
    			}
    			g2.dispose();
    		}
			g.dispose();
		}catch(Exception ex){}
    }//end paintComponent
 
	public static void main(String[] args) {
		JFrame jf = new JFrame();
		jf.add(new Prueba());
		jf.setVisible(true);
		jf.setExtendedState(JFrame.MAXIMIZED_BOTH);
	}
 
}

y pasa lo siguiente, arranca con unos 27MB y va creciendo hasta 90MB pero cuando deja de graficar no baja nada el peso de la aplicación!!! y eso que aca no creo ninguna variable en donde almacenar nada.
Lo mismo me pasa con mi aplicación nada mas que los valores son mucho mas grandes.
Espero puedan explicarme que pasa.
Desde ya muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar