style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

PROBLEMA CON MEMORIA EN JAVA

Hola chicos, tengo un problema con respecto a la memoria, he hecho una aplicacion de escritorio con conexion base de datos mysql , mi problema esta que cuando abro ventanas de tipo jdialog la memoria crece pero al cerrar el jdialog no baja la memoria a su tamaño normal se queda en el tamaño que crecio al abrir el jdialog y asi es copn todo y me parece extraño ya que a los dialog los cierro con dispose().
aluna sugerencia que me podria decir de como hacer para que baje la memoria cuando no se use las ventanas, o cuando se realize una consulta con la BD, ya que me preocupa porque mi programa va a ser corrido en algunos casos en maquinas que tiene 256mb de ram mi temor es que colapse.
esto es de suma urgencia ya que por esto aun no puedo sustentar mi programa.
de antemano se los agradesco

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de iberck

Eso es un poco extraño,

Eso es un poco extraño, podrías poner la parte crítica de tu código fuente ?

JavaRanch big moose saloon member

Imagen de miguelr22

Aui te mando el codigo

bueno aqui te mando la manera de como llamo a mi jdialog:

Documentos Frmdc;
    Frmdc= new Documentos(this,true,this);
    Frmdc.setTitle("RESOLUCIONES");
    Frmdc.setVisible(true);

Bueno, por mi parte yo lo veo bien, ahora te mando el codigo la parte inicial del jdialog:

 public class Documentos extends javax.swing.JDialog {
static String dir = System.getProperty("user.dir");
String dir2 = System.getProperty("user.dir");
Connection con = null;Statement stmt_costas;ResultSet rsbuscar,rsdirec1,rsbuscar2,rsdirec2,rsimporte,rscostas;
public String bd = "maestrobd";CallableStatement stmt_buscar, stmt_direc1,stmt_buscar2,stmt_direc2,stmt_importe;
public String login ="root";
public String password ="123456";
public String url;int c=0,ff=0;
Administrador Frma;String fecha,fecha2,anio;int mes,mes2,num;
private File file;int comp;private MiWorker trabajador;
    public Documentos(java.awt.Frame parent, boolean modal,Administrador Administrador) {
        super(parent, modal);
        Frma = Administrador;
        initComponents();        
        jDateChooser1.getJCalendar().setWeekOfYearVisible(false);
        jDateChooser2.getJCalendar().setWeekOfYearVisible(false);
        jDateChooser1.getJCalendar().setSundayForeground(java.awt.Color.RED);
        this.setLocationRelativeTo(null);
    }
    private Documentos(javax.swing.JFrame JFrame, boolean b) {
        super(JFrame, b);
        initComponents();  
    }
 public class Modelo extends DefaultTableModel
{
        @Override
   public boolean isCellEditable (int row, int column)
   {

       return false;
   }
}
Modelo modelo = new Modelo();

como dije anteriormente en todos los jdialog que llamo crecen pero este que te mando es el que crece mas de memoria que los otros por eso te lo mando, a mi parecer ahi no veo nada extaño.
Esperes tu encuentre el problema y lo puedas solucionar.
de antemano te lo agradesco

Imagen de iberck

El codigo parece estar bien,

El codigo parece estar bien, que tanto crece la memoria?

JavaRanch big moose saloon member

Imagen de miguelr22

Crece Aproximadamente...

bueno crece Aproximadamente entre 5 y 10mb, peor a mi lo que me preocupa mas es que al cerrar el jdialog sigue con esos 5 mb de memoria de mas osea mi programa esta corriendo con una memoria de 30mb de ram cuando abro el dialog sube hasta 40mb y supuestamente si cierro el dialog deberia bajar de nuevo a los 30mb, pero no mi programa sigue con los 40mb y si abro otro jdialog sigue subiendo hasta ah llegoad a los 65mb, y no tengo idea como hacer para que baje al minimizarlo si baja pero no quiero estar minimizando a cada rato es mas mi programa va aser usado por otras personas que derrepente ni lo piensan minimizar.
espero que me puedas ayudar.

Imagen de iberck

Ok, el comportamiento por

Ok, el comportamiento por default de un JDialog al cerrarse es "disponse" (Nb) lo cual significa que ahi queda para ser reutilizado cuando lo vuelvas a invocar, esa es la razón por la que la memoria no baja cada que lo cierras.
El problema aqui esque no existe alguna otra operación por default (setDefaultCloseOperation) que pueda ayudarte, por lo tanto la alternativa que yo veo es que al cerrar el JDialog le avises al padre para que éste lo iguale a null y el garbage collector pase por él en algún momento, de esta forma debería liberarse la memoria.

JavaRanch big moose saloon member

Imagen de miguelr22

Gracias por la respuesta

Gracias por la respuesta, pero no tengo idea de como avisarle al padre(en este caso viene a ser mi jFrame), que el jdialog ah sido cerrado para ponerlo en valor nulo.
me podrias dar una idea de como hago eso?

mi opinion

Mira yo te hago las siguientes odservaciones..
*veo que en cada JDialog tienes una conexion, yo te recomendaria que solo tengas una para toda tu aplicacion..

En cuando al JDialog aqui te adjunto el codigo fuente de como los he trabajado, odserva con cuidado que yo en ningun momento tengo un Connection o un ResultSet o un Statement.
A la hora de llamarlo mando a llamar el metodo static showMessage(xxx,xxx);
Saludos

public class JProductFinder extends javax.swing.JDialog {

    private ProductInfoExt m_ReturnProduct;
    private ListProvider lpr;
   
    /** Creates new form JProductFinder */
    private JProductFinder(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
    }
    /** Creates new form JProductFinder */
    private JProductFinder(java.awt.Dialog parent, boolean modal) {
        super(parent, modal);
    }    
   
    private ProductInfoExt init(DataLogicSales dlSales) {
       
        initComponents();
       
        jScrollPane1.getVerticalScrollBar().setPreferredSize(new Dimension(35, 35));

        //ProductFilter jproductfilter = new ProductFilter(app);
        ProductFilterSales jproductfilter = new ProductFilterSales(dlSales, m_jKeys);
        jproductfilter.activate();
        m_jProductSelect.add(jproductfilter, BorderLayout.CENTER);
       
        lpr = new ListProviderCreator(dlSales.getProductList(), jproductfilter);  
       
        jListProducts.setCellRenderer(new ProductRenderer());
       
        getRootPane().setDefaultButton(jcmdOK);  
   
        m_ReturnProduct = null;
       
        //show();
        setVisible(true);
       
        return m_ReturnProduct;
    }
   
   
    private static Window getWindow(Component parent) {
        if (parent == null) {
            return new JFrame();
        } else if (parent instanceof Frame || parent instanceof Dialog) {
            return (Window)parent;
        } else {
            return getWindow(parent.getParent());
        }
    }    
   
    public static ProductInfoExt showMessage(Component parent, DataLogicSales dlSales) {
         
        Window window = getWindow(parent);
       
        JProductFinder myMsg;
        if (window instanceof Frame) {
            myMsg = new JProductFinder((Frame) window, true);
        } else {
            myMsg = new JProductFinder((Dialog) window, true);
        }
        return myMsg.init(dlSales);
    }    
   
    private static class MyListData extends javax.swing.AbstractListModel {
       
        private java.util.List m_data;
       
        public MyListData(java.util.List data) {
            m_data = data;
        }
       
        public Object getElementAt(int index) {
            return m_data.get(index);
        }
       
        public int getSize() {
            return m_data.size();
        }
    }  
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */

    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jPanel4 = new javax.swing.JPanel();
        m_jKeys = new com.openbravo.editor.JEditorKeys();
        jPanel2 = new javax.swing.JPanel();
        m_jProductSelect = new javax.swing.JPanel();
        jPanel3 = new javax.swing.JPanel();
        jButton3 = new javax.swing.JButton();
        jPanel5 = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jListProducts = new javax.swing.JList();
        jPanel1 = new javax.swing.JPanel();
        jcmdOK = new javax.swing.JButton();
        jcmdCancel = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle(AppLocal.getIntString("form.productslist")); // NOI18N

        jPanel4.setLayout(new java.awt.BorderLayout());
        jPanel4.add(m_jKeys, java.awt.BorderLayout.NORTH);

        getContentPane().add(jPanel4, java.awt.BorderLayout.LINE_END);

        jPanel2.setLayout(new java.awt.BorderLayout());

        m_jProductSelect.setLayout(new java.awt.BorderLayout());

        jButton3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/openbravo/images/launch.png"))); // NOI18N
        jButton3.setText(AppLocal.getIntString("button.executefilter")); // NOI18N
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });
        jPanel3.add(jButton3);

        m_jProductSelect.add(jPanel3, java.awt.BorderLayout.SOUTH);

        jPanel2.add(m_jProductSelect, java.awt.BorderLayout.NORTH);

        jPanel5.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5));
        jPanel5.setLayout(new java.awt.BorderLayout());

        jScrollPane1.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

        jListProducts.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        jListProducts.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
            public void valueChanged(javax.swing.event.ListSelectionEvent evt) {
                jListProductsValueChanged(evt);
            }
        });
        jListProducts.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jListProductsMouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(jListProducts);

        jPanel5.add(jScrollPane1, java.awt.BorderLayout.CENTER);

        jPanel2.add(jPanel5, java.awt.BorderLayout.CENTER);

        jPanel1.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));

        jcmdOK.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/openbravo/images/button_ok.png"))); // NOI18N
        jcmdOK.setText(AppLocal.getIntString("Button.OK")); // NOI18N
        jcmdOK.setEnabled(false);
        jcmdOK.setMargin(new java.awt.Insets(8, 16, 8, 16));
        jcmdOK.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jcmdOKActionPerformed(evt);
            }
        });
        jPanel1.add(jcmdOK);

        jcmdCancel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/openbravo/images/button_cancel.png"))); // NOI18N
        jcmdCancel.setText(AppLocal.getIntString("Button.Cancel")); // NOI18N
        jcmdCancel.setMargin(new java.awt.Insets(8, 16, 8, 16));
        jcmdCancel.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jcmdCancelActionPerformed(evt);
            }
        });
        jPanel1.add(jcmdCancel);

        jPanel2.add(jPanel1, java.awt.BorderLayout.SOUTH);

        getContentPane().add(jPanel2, java.awt.BorderLayout.CENTER);

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-665)/2, (screenSize.height-565)/2, 665, 565);
    }// </editor-fold>                        

    private void jListProductsMouseClicked(java.awt.event.MouseEvent evt) {                                          

        if (evt.getClickCount() == 2) {
            m_ReturnProduct = (ProductInfoExt) jListProducts.getSelectedValue();
            dispose();
        }
       
    }                                          

    private void jcmdOKActionPerformed(java.awt.event.ActionEvent evt) {                                      
       
        m_ReturnProduct = (ProductInfoExt) jListProducts.getSelectedValue();
        dispose();
       
    }                                      

    private void jcmdCancelActionPerformed(java.awt.event.ActionEvent evt) {                                          
       
        dispose();
       
    }                                          

    private void jListProductsValueChanged(javax.swing.event.ListSelectionEvent evt) {                                          

        jcmdOK.setEnabled(jListProducts.getSelectedValue() != null);
       
    }                                          

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                        

        try {
            jListProducts.setModel(new MyListData(lpr.loadData()));
            if (jListProducts.getModel().getSize() > 0) {
                jListProducts.setSelectedIndex(0);
            }
        } catch (BasicException e) {
            e.printStackTrace();
        }
       
    }                                        
   
   
    // Variables declaration - do not modify                    
    private javax.swing.JButton jButton3;
    private javax.swing.JList jListProducts;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JPanel jPanel5;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JButton jcmdCancel;
    private javax.swing.JButton jcmdOK;
    private com.openbravo.editor.JEditorKeys m_jKeys;
    private javax.swing.JPanel m_jProductSelect;
    // End of variables declaration                  
   
}

Imagen de Nopalin

Coloca el código

Podrias colocar todo el código de tu dialogo? inclusive el evento en el Frame que lo manda a llamar.

Además recuerda que el código es para que lo entiendan los demás, no solo tú, dale un poco de formato.

Sobres

juego memoria

Hola tengo que programar un juego en java que es memoria pero no se por favor me podrian enviar el codigo, seria de mucha utilidad el juegoconsiste en encontrar pares y se sube de nivel mientras mas rapido logremos encontrarlos y se pierde cuando el tiempo se acaba

Imagen de benek

En este hilo no se está

En este hilo no se está discutiendo acerca del juego de memoria, sino de la RAM en Java.

Para aprovechar y orientarte (porque nadie aquí creo que te vaya a hacer tu tarea) puedes basarte en JPexeso, que es un juego de memoria hecho en Java, la página oficial es la siguiente: http://jpexeso.sourceforge.net/

Saludos.

--
Javier Benek

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">