Pagina 1 di 6 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 55
  1. #1

    java occupa memoria crescente!!!

    Salve a tutti,
    sono nuovo del sito e volevo esporre un problema molto strano.
    Metre cercavo di creare un programmino java che lavorasse in background mi sono accorto, tramite un anvir security suite(un task manager avanzato per win), che il mio programma continuava ad allocare memoria, fino a quando, anche 2 giorni dopo, il sistema risultava inutilizzabile.
    Pensavo fosse un problema del codice scritto da me; invece ho voluto fare una contro-prova:
    ho creato un nuovo programma java: una semplice finestra con tre bottoni che non fanno nulla (ho usato awt);
    ho lanciato la finestra creata e di nuovo tramite anvir security suite mi sono messo ad osservare le statistiche del processo(cioè la parte relativa alla memoria usata dal processo); ecco il risultato:
    -la memoria allocata cresce in continuazione, seppur lentamente;
    -la memoria cresce anche se passo il mouse sopra i bottoni della finestra, senza cliccare;

    So bene che esiste il metodo System.gc() per "suggerire" al garbage collection di agire; ma nella relativa documentazione si parla solo di suggerimento(ho pure aggiunto un bottone alla finestra per lanciare il gc, ma non cambia nulla: la memoria conrinua a crescere).

    Non vorrei lanciare conclusioni affrettate, ma puo' essere un problema che gli ingegnari della sun non hanno ancora visto, oppure esiste una soluzione?

    Grazie in anticipo.

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Che versione di Java hai utilizzato? Prova con Java 5/6 (a seconda di cosa hai ora) e vedi se cambia qualcosa :master:
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    uso l'ultima, la 1.6, nota come java 6.
    Puoi fare anche tu la stessa prova che ho fatto io; anvir security suite trial e' scaricabile liberamente. Prova a creare un programma e vedi cosa viene fuori osservando la memoria occupata; almeno cosi vedo se e' un problema del mio sistema.

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da rocky161
    Puoi fare anche tu la stessa prova che ho fatto io; anvir security suite trial e' scaricabile liberamente.
    Uso mac
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    ho capito; puoi provare ad usare un altro programma che monitorizzi la memoria.
    Altrimenti dovremmo vedere se ci sono altri nel forum che potrebbero darmi una mano usando windows

  6. #6
    guarda io utilizzo netbeans che e' scritto in java, e lo lascio aperto sul mac anche per settimane, e non mi e' mai successo che mi rendesse il computer inutilizzabile.
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  7. #7
    io uso eclipse, che e' pure scritto in java, e non rende il pc inutilizzabile...ma dopo un po' di tempo (qualche giorno) lo stesso eclipse mi alloca una memoria troppo alta. Prova a lasciare la finestra di netbeans aperta(srnza ridurla a icona) e vedi come va la memoria quando passi col mouse sopra i pulsanti (ci dovrebbe essere una variazione, seppur minima, della memoria usata; essa col tempo va solo ad aumentare, cosicchè se tieni un anno il pc acceso troverai una memoria piena, in teoria).
    Prova a monitorare l'uso della memoria che tiene allocata netbeans

  8. #8
    allora non può aiutarmi nessuno?

  9. #9
    ma aiutarti in cosa esattamente?

    Dubito che possa essere un problema non rilevato dagli ingegneri della SUN comunque.
    Ti faccio presente che anche application e web server come Tomcat e JBoss sono scritti in Java, e sono utilizzati a livello enterprise 24/7, quindi dubito JVM possa avere un utilizzo di memoria che cresca infinitamente fino al crash. Sicuro che la tua applicazione non alloca oggetti a cui rimangono riferementi e quindi non vengono mai eliminati dal garbage collector?
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  10. #10
    a livello di server ci sono stati problemi del genere e sono stati risolti riavviando quando c'è meno traffico, circa una volta l'anno. Qui c'è il link di un problema del genere:

    http://www.hostingtalk.it/forum/gest...a-memoria.html

    comunque io la prova l'ho fatta su questo codice, che e' semplice:

    codice:
    import java.awt.Frame;
    import javax.swing.JPanel;
    import java.awt.Rectangle;
    import javax.swing.JButton;
    
    
    public class P extends Frame {
    
    	private static final long serialVersionUID = 1L;
    	private JPanel jPanel = null;
    	private JButton jButton1 = null;
    	private JButton jButton = null;
    	/**
    	 * This method initializes jPanel	
    	 * 	
    	 * @return javax.swing.JPanel	
    	 */
    	private JPanel getJPanel() {
    		if (jPanel == null) {
    			jPanel = new JPanel();
    			jPanel.setLayout(null);
    			jPanel.setBounds(new Rectangle(8, 28, 284, 188));
    			jPanel.add(getJButton1(), null);
    			jPanel.add(getJButton(), null);
    		}
    		return jPanel;
    	}
    
    	/**
    	 * This method initializes jButton1	
    	 * 	
    	 * @return javax.swing.JButton	
    	 */
    	private JButton getJButton1() {
    		if (jButton1 == null) {
    			jButton1 = new JButton();
    			jButton1.setBounds(new Rectangle(73, 33, 140, 65));
    			jButton1.setText("bottone");
    			jButton1.addActionListener(new java.awt.event.ActionListener() {
    				public void actionPerformed(java.awt.event.ActionEvent e) {
    					//non deve fare nulla
    				}
    			});
    		}
    		return jButton1;
    	}
    
    	/**
    	 * This method initializes jButton	
    	 * 	
    	 * @return javax.swing.JButton	
    	 */
    	private JButton getJButton() {
    		if (jButton == null) {
    			jButton = new JButton();
    			jButton.setBounds(new Rectangle(75, 112, 136, 56));
    			jButton.setText("chiudi");
    			jButton.addActionListener(new java.awt.event.ActionListener() {
    				public void actionPerformed(java.awt.event.ActionEvent e) {
    					System.exit(0);
    				}
    			});
    		}
    		return jButton;
    	}
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		P f=new P();
    		f.show();
    
    	}
    
    	/**
    	 * This is the default constructor
    	 */
    	public P() {
    		super();
    		initialize();
    	}
    
    	/**
    	 * This method initializes this
    	 * 
    	 * @return void
    	 */
    	private void initialize() {
    		this.setLayout(null);
    		this.setSize(300, 223);
    		this.setTitle("Frame");
    		
    		this.add(getJPanel(), null);
    	}
    
    }  //  @jve:decl-index=0:visual-constraint="10,10"
    Il programma e' molto semplice e lo si crea con un visual editor (ho usato quello di eclipse, quindi non credo che ci siano errori miei, perche' e' scritto in automatico); eppure al passaggio del mouse sui pulsanti la memoria allocata cresce, e se sto fermo con il mouse la memoria cresce sempre, pero' piu' lentamente.

    Chiedo solo di provare questo codice e, mentre la finestra e' attiva (gli effetti si vedomo megli a finestra sempre attiva), monitorare l'uso della momoria da parte del processo java che ha lanciato questo codice(come ho detto prima io ho usanto anvir security suite per monitorare l'uso della memoria).

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.