JDesktopPane + JInternalFrame + Gerenciamento de memória

Pessoal, boa noite.
Este é meu primeiro tópico no fórum.

Após anos e anos programando em VB e .Net, resolvi dar um “turbo” e aprender a linguagem Java.
Estou simplesmente apaixonado pela linguagem, porém como venho do mundo Microsoft, estou apanhando em algumas coisas, por exemplo:

Estou desenvolvendo meu primeiro sistema (para desktops) em Java e estou utilizando o Eclipse.
Sei da existência do NetBeans, porém, estou preferindo utlizar o Eclipse pq eu me senti mais à vontade com ele.

No meu sistema tenho um JDesktopPane como “pai” e um JInternalFrame como “filho” que faz o cadastro de cidades no MySQL.

Eu executei o sistema com o Gerenciador de Tarefas aberto e notei algo que não gostei muito.

Quando rodo sistema o processo javaw consome +/- uns 17.000 K de memória.
Quando invoco o JInternalFrame o processo javaw aumenta para 24.000 K.

Bom, até ai tudo beleza. Porém, quando eu fecho o JInternalFrame o consumo do processo javaw continua nos 24.000 K.

O correto não seria abaixar o consumo pelo menos um pouco?

Abraços, e muito obrigado.

Pessoal, segue abaixo o código do meu JInternalFrame.
Vc’s poderiam verificar se eu estou declarando corretamente minhas váriaveis e constantes?

[code]import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.event.InternalFrameEvent;
import javax.swing.event.InternalFrameListener;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;

@SuppressWarnings(“serial”)
public class JanelaCidades extends Persistencia {

private static DefaultTableModel modelo = new DefaultTableModel() {
	public boolean isCellEditable(int rowIndex, int mColIndex) {
		return false;
	}
};

private static String cidadeSelecionada = null;
private static String UFSelecionado = null;

static JInternalFrame montaJanelaCidades() {

	final JInternalFrame janelaCidades = new JInternalFrame();
	
	try {
		
		janelaCidades.setLayout(null);

		Font fontPadrao = new Font("Verdana", 4, 11);
		

		// -----------------------------------------------------------------
		// Label Cidade
		JLabel lbl_cidade = new JLabel("Cidade");
		lbl_cidade.setFont(fontPadrao);
		lbl_cidade.setLocation(10, 10);
		lbl_cidade.setSize(40, 10);
		janelaCidades.add(lbl_cidade);

		// -----------------------------------------------------------------
		// Text Cidade
		final JTextField txt_cidade = new JTextField();
		txt_cidade.setFont(fontPadrao);
		txt_cidade.setLocation(10, 26);
		txt_cidade.setSize(385, 20);
		janelaCidades.add(txt_cidade);

		// -----------------------------------------------------------------
		// Label UF
		JLabel lbl_UF = new JLabel("UF");
		lbl_UF.setFont(fontPadrao);
		lbl_UF.setLocation(400, 10);
		lbl_UF.setSize(40, 10);
		janelaCidades.add(lbl_UF);

		// -----------------------------------------------------------------
		// ComboBox UF
		final JComboBox cmb_UF = new JComboBox();
		cmb_UF.setFont(fontPadrao);
		cmb_UF.setLocation(400, 25);
		cmb_UF.setSize(60, 20);
		cmb_UF.setBackground(txt_cidade.getBackground());
		cmb_UF.addItem("AC");
		cmb_UF.addItem("AL");
		cmb_UF.addItem("AP");
		cmb_UF.addItem("AM");
		cmb_UF.addItem("BA");
		cmb_UF.addItem("CE");
		cmb_UF.addItem("DF");
		cmb_UF.addItem("GO");
		cmb_UF.addItem("MA");
		cmb_UF.addItem("MG");
		cmb_UF.addItem("MS");
		cmb_UF.addItem("MT");
		cmb_UF.addItem("PA");
		cmb_UF.addItem("PB");
		cmb_UF.addItem("PR");
		cmb_UF.addItem("PE");
		cmb_UF.addItem("PI");
		cmb_UF.addItem("RJ");
		cmb_UF.addItem("RN");
		cmb_UF.addItem("RO");
		cmb_UF.addItem("RR");
		cmb_UF.addItem("SC");
		cmb_UF.addItem("SE");
		cmb_UF.addItem("SP");
		cmb_UF.addItem("TO");
		cmb_UF.setSelectedItem("SP");
		janelaCidades.add(cmb_UF);

		// -----------------------------------------------------------------
		// JButton Inserir
		final JButton btn_Inserir = new JButton("Inserir");
		final ImageIcon imgInserir = new ImageIcon("imgs/16x16/inserir.png");
		btn_Inserir.setIcon(imgInserir);
		btn_Inserir.setFont(fontPadrao);
		btn_Inserir.setSize(100, 28);
		btn_Inserir.setLocation(10, 60);
		janelaCidades.add(btn_Inserir);

		// -----------------------------------------------------------------
		// JButton Alterar
		final JButton btn_Alterar = new JButton("Alterar");
		final ImageIcon imgAlterar = new ImageIcon("imgs/16x16/alterar.png");
		btn_Alterar.setIcon(imgAlterar);
		btn_Alterar.setFont(fontPadrao);
		btn_Alterar.setSize(110, 28);
		btn_Alterar.setLocation(115, 60);
		janelaCidades.add(btn_Alterar);

		// -----------------------------------------------------------------
		// JButton Confirmar
		final JButton btn_Confirmar = new JButton("Confirmar");
		final ImageIcon imgConfirmar = new ImageIcon(
				"imgs/16x16/confirmar.png");
		btn_Confirmar.setIcon(imgConfirmar);
		btn_Confirmar.setFont(fontPadrao);
		btn_Confirmar.setSize(115, 28);
		btn_Confirmar.setLocation(230, 60);
		btn_Confirmar.setEnabled(false);
		janelaCidades.add(btn_Confirmar);

		// -----------------------------------------------------------------
		// JButton Remover
		final JButton btn_Remover = new JButton("Remover");
		final ImageIcon imgRemover = new ImageIcon("imgs/16x16/remover.png");
		btn_Remover.setIcon(imgRemover);
		btn_Remover.setFont(fontPadrao);
		btn_Remover.setSize(110, 28);
		btn_Remover.setLocation(350, 60);
		btn_Remover.setEnabled(false);
		janelaCidades.add(btn_Remover);

		// -----------------------------------------------------------------
		// JTable
		final JTable gridAlterarRemover = new JTable(modelo);
		gridAlterarRemover.setFont(fontPadrao);

		// Monta o Grid
		if (modelo.getColumnCount() != 2) {
			modelo.addColumn("Cidade");
			modelo.addColumn("UF");
		}

		final JScrollPane scrollAlterarRemover = new JScrollPane(
				gridAlterarRemover);

		scrollAlterarRemover.setLocation(10, 140);
		scrollAlterarRemover.setSize(450, 130);
		scrollAlterarRemover.setFont(fontPadrao);

		DefaultTableCellRenderer centralizado = new DefaultTableCellRenderer();
		centralizado.setHorizontalAlignment(SwingConstants.CENTER);
		gridAlterarRemover.getColumnModel().getColumn(1).setCellRenderer(
				centralizado);

		gridAlterarRemover.setEnabled(false);

		janelaCidades.add(scrollAlterarRemover);

		// -----------------------------------------------------------------
		// Monta janela
		janelaCidades.setSize(480, 313);
		janelaCidades.setMaximizable(false);
		janelaCidades.setResizable(false);
		janelaCidades.setClosable(true);
		janelaCidades.setLocation(10, 50);
		janelaCidades.setTitle("Cidades");
		janelaCidades.setVisible(true);
		janelaCidades
				.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);

		atualizarGrid();

		// -----------------

		janelaCidades.addInternalFrameListener(new InternalFrameListener() {

			@Override
			public void internalFrameOpened(InternalFrameEvent e) {
			
			}

			@Override
			public void internalFrameIconified(InternalFrameEvent e) {
				// TODO Auto-generated method stub

			}

			@Override
			public void internalFrameDeiconified(InternalFrameEvent e) {
				// TODO Auto-generated method stub

			}

			@Override
			public void internalFrameDeactivated(InternalFrameEvent e) {
				// TODO Auto-generated method stub

			}

			@Override
			public void internalFrameClosing(InternalFrameEvent e) {
				cidadeSelecionada = null;
				UFSelecionado = null;
				
				try {
					finalize();
				} catch (Throwable e1) {
					JOptionPane.showMessageDialog(null, e1.getMessage(), "Atenção", 2);
				}
			}

			@Override
			public void internalFrameClosed(InternalFrameEvent e) {
				// TODO Auto-generated method stub

			}

			@Override
			public void internalFrameActivated(InternalFrameEvent e) {
				// TODO Auto-generated method stub

			}
		});

		// ===================================================================
		// txt_cidade LOSTFocus
		txt_cidade.addFocusListener(new FocusListener() {

			@Override
			public void focusLost(FocusEvent e) {
				txt_cidade.setText(txt_cidade.getText().toUpperCase());
				cidadeSelecionada = txt_cidade.getText();

			}

			@Override
			public void focusGained(FocusEvent e) {
				// TODO Auto-generated method stub

			}
		});

		// ===================================================================
		// Seleciona linha do Grid
		gridAlterarRemover.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent e) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mousePressed(MouseEvent e) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mouseExited(MouseEvent e) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mouseEntered(MouseEvent e) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mouseClicked(MouseEvent e) {
				if (gridAlterarRemover.isEnabled()) {
					cidadeSelecionada = (String) gridAlterarRemover
							.getValueAt(
									gridAlterarRemover.getSelectedRow(), 0);
					txt_cidade.setText(cidadeSelecionada);

					// ----------------------

					UFSelecionado = (String) gridAlterarRemover.getValueAt(
							gridAlterarRemover.getSelectedRow(), 1);
					cmb_UF.setSelectedItem(UFSelecionado);
				}
			}

		});

		// --------------------------------------------------------------
		// botão Inserir
		btn_Inserir.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				
				String cidade = txt_cidade.getText();

				if (cidade.isEmpty()) {
					JOptionPane.showMessageDialog(null,
							"O campo 'Cidade' não pode ser vázio.",
							"Atenção", 2, null);
					return;
				}

				try {
					JanelaCidades
							.insertSQL("insert into Cidades (cid_nome, cid_uf) VALUES ('"
									+ txt_cidade.getText()
									+ "','"
									+ cmb_UF.getSelectedItem() + "')");
				} catch (Exception e2) {
					System.out.println(e2.getMessage());
				}

				try {
					atualizarGrid();
				} catch (Exception e1) {
					System.out.println(e1.getMessage());
				}
			}
		});

		// --------------------------------------------------------------
		// botão Alterar
		
		btn_Alterar.addActionListener(new ActionListener() {
			
			final ImageIcon imgCancelar = new ImageIcon("imgs/16x16/cancelar.png");
			
			@Override
			public void actionPerformed(ActionEvent e) {
				if (btn_Alterar.getText() == "Alterar") {
					txt_cidade.setText(null);
					btn_Alterar.setText("Cancelar");
					btn_Alterar.setIcon(imgCancelar);
					btn_Inserir.setEnabled(false);
					btn_Confirmar.setEnabled(true);
					btn_Remover.setEnabled(true);
					gridAlterarRemover.setEnabled(true);
				} else if (btn_Alterar.getText() == "Cancelar" ){
					btn_Alterar.setText("Alterar");
					btn_Alterar.setIcon(imgAlterar);
					btn_Inserir.setEnabled(true);
					btn_Confirmar.setEnabled(false);
					btn_Remover.setEnabled(false);
					gridAlterarRemover.setEnabled(false);
					txt_cidade.setText(null);
					cmb_UF.setSelectedItem("SP");
					gridAlterarRemover.setEnabled(false);
				}
				
				try {
					atualizarGrid();
				} catch (Exception e1) {
					System.out.println(e1.getMessage());;
				}
			}
		});

			
		// --------------------------------------------------------------
		// botão Confirmar
		btn_Confirmar.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				if (cidadeSelecionada.isEmpty()) {
					JOptionPane.showMessageDialog(null,
							"Não há nenhuma cidade selecionada", "Atenção",
							2);
					return;
				} else {
					try {
						JanelaCidades
								.updateSQL("update Cidades set cid_nome='"
										+ txt_cidade.getText()
										+ "', cid_uf = '"
										+ (String) cmb_UF.getSelectedItem()
										+ "' where cid_nome ='"
										+ cidadeSelecionada + "'");
					} catch (Exception e2) {
						System.out.println(e2.getMessage());
					}

					try {
						atualizarGrid();
					} catch (Exception e1) {
						System.out.println(e1.getMessage());
					}

					txt_cidade.setText(null);
					cmb_UF.setSelectedItem("SP");
					btn_Inserir.setEnabled(true);
					btn_Alterar.setText("Alterar");
					btn_Alterar.setIcon(new ImageIcon(
							"imgs/16x16/alterar.png"));
					btn_Confirmar.setEnabled(false);
					btn_Remover.setEnabled(false);
					gridAlterarRemover.setEnabled(false);
				}
			}
		});

		// --------------------------------------------------------------
		// botão Remover
		btn_Remover.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				if (cidadeSelecionada.isEmpty()) {
					JOptionPane.showMessageDialog(null,
							"Não há nenhuma cidade selecionada", "Atenção",
							2);
					return;
				}
				int resp = JOptionPane.showConfirmDialog(null,
						"Deseja realmente remover a cidade '"
								+ cidadeSelecionada + "'?", "Atenção",
						JOptionPane.YES_NO_OPTION);
				if (resp == 0) {

					try {
						JanelaCidades
								.deleteSQL("delete from Cidades where cid_nome='"
										+ cidadeSelecionada + "'");
					} catch (Exception e2) {
						System.out.println(e2.getMessage());
					} finally {
						
					}

					try {
						atualizarGrid();
					} catch (Exception e1) {
						System.out.println(e1.getMessage());
					}

					txt_cidade.setText(null);
					cmb_UF.setSelectedItem("SP");
					btn_Inserir.setEnabled(true);
					btn_Alterar.setText("Alterar");
					btn_Alterar.setIcon(new ImageIcon(
							"imgs/16x16/alterar.png"));
					btn_Confirmar.setEnabled(false);
					btn_Remover.setEnabled(false);
					gridAlterarRemover.setEnabled(false);
				} else {
					return;
				}
			}
		});

	} catch (Exception e) {
		JOptionPane.showMessageDialog(null, e.getMessage(), "Atenção", 2);
	}
	return janelaCidades;
}

// =================================================================
// Atualiza o Grid
public static void atualizarGrid() throws Exception {
	
	Class.forName("org.gjt.mm.mysql.Driver");

	Connection con = DriverManager
			.getConnection("jdbc:mysql://localhost/x_easy?user=root&password=1104");
	Statement stm = con.createStatement();
	
	ResultSet rs = stm
	.executeQuery("select * from cidades order by cid_nome asc");

	try {

		// Limpa o Grid
		modelo.setNumRows(0);			
		

		while (rs.next()) {
			modelo.addRow(new String[] { rs.getString("cid_nome"),
					rs.getString("cid_uf") });
		}

	} catch (Exception e) {
		JOptionPane.showMessageDialog(null, e.getMessage(), "Atenção", 2);
	} finally {
		stm.close();
		con.close();
	}
}

}[/code]

Obrigado!

Oi,

O lance é você chamar o método doDefaultCloseAction(); para fechar a aplicação, já retirando essa quantidade de memoria ocupada.

Tchauzin!

Boa tarde!!

Estou com o mesmo problema citado pelo Cartoni…
Tentei usar o doDefaultCloseAction() diretamente no meu JInternalFrame, porém não adiantou.

Alguém tem alguma novidade sobre isso?

Obrigado.