PDA

View Full Version : [Java] Problema gestione Heap


Reflex86
03-01-2009, 14:38
Ciao a tutti,
il mio problema è il seguente:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source)
at java.lang.AbstractStringBuilder.expandCapacity(Unknown Source)
at java.lang.AbstractStringBuilder.append(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at javax.swing.plaf.basic.BasicTextUI.updateBackground(Unknown Source)
at javax.swing.plaf.basic.BasicTextUI.installUI(Unknown Source)
at javax.swing.JComponent.setUI(Unknown Source)
at javax.swing.text.JTextComponent.setUI(Unknown Source)
at javax.swing.text.JTextComponent.updateUI(Unknown Source)
at javax.swing.text.JTextComponent.<init>(Unknown Source)
at javax.swing.JTextField.<init>(Unknown Source)
at javax.swing.JTextField.<init>(Unknown Source)
at javax.swing.JFormattedTextField.<init>(Unknown Source)
at javax.swing.JSpinner$DefaultEditor.<init>(Unknown Source)
at javax.swing.JSpinner$NumberEditor.<init>(Unknown Source)
at javax.swing.JSpinner$NumberEditor.<init>(Unknown Source)
at javax.swing.JSpinner$NumberEditor.<init>(Unknown Source)
at javax.swing.JSpinner.createEditor(Unknown Source)
at javax.swing.JSpinner.<init>(Unknown Source)
at javax.swing.JSpinner.<init>(Unknown Source)


Il mio programma è una GUI che gestisce un numero piuttosto alto di componenti, il problema di sicuro non è un ciclo infinito o simili, basta che aggiungo tot elementi e il programma restituisce questo errore.

Se nei Run Arguments di Eclipse inserisco:

-Xms50m
-Xmx250m

funziona normalmente, impostando i nuovi valori attuali e max di heap. Però i problemi sono due:

1) l'indicatore di memoria heap di eclipse non mi segnala affatto tutto questo consumo di memoria, rimane intorno ai 25/40 MB occupati, sapete perchè fa cosi?

2) se utilizzo quelle impostazioni per lanciare il programma, funziona bene sotto eclipse ma se faccio un jar eseguibile non va affatto. Esiste un modo per creare un jar che imposti automaticamente la VM con i valori che mi servono? Altrimenti è abbastanza inutile..

Grazie

wizard1993
03-01-2009, 14:43
puoi postare il codice che gestisce l'inizializzazione di quel componente, certamente è possibile inizializzarlo

Reflex86
03-01-2009, 15:06
Non saprei proprio che postarti.. l'errore lo da in ogni caso io tenti di istanziare altri oggetti oltre un certo numero. Per fare una prova ho inserito ad esempio un

JPanel a = new JPanel();
for (int i=0; i<100; i++)
a.add(new JSpinner());

e mi da l'errore, se invece provo a inserirne meno riesco ancora a rientrarci. Stessa cosa se addo un jcombobox o altri componenti. Però non capisco queste due cose:



1) l'indicatore di memoria heap di eclipse non mi segnala affatto tutto questo consumo di memoria, rimane intorno ai 25/40 MB occupati, sapete perchè fa cosi?

2) se utilizzo quelle impostazioni per lanciare il programma, funziona bene sotto eclipse ma se faccio un jar eseguibile non va affatto. Esiste un modo per creare un jar che imposti automaticamente la VM con i valori che mi servono? Altrimenti è abbastanza inutile..

Grazie


Ad onor della cronaca l'errore lo segnala qui:

frame.setVisible(true); nel metodo che avvia la finestra principale. Grazie per l'aiuto :)

Dark Phoenix
04-01-2009, 11:26
Ciao a tutti,
il mio problema è il seguente:
Se nei Run Arguments di Eclipse inserisco:

-Xms50m
-Xmx250m



Attenzione, se ho capito bene, cambi la memoria disponibile a Eclipse e non ai programmi che lanci sotto Eclipse.

Per cambiare la memoria dei programmi che lanci sotto eclipse devi configurare gli argomenti della VM sotto "run configuration" dove imposti Xmx Xms e tutto quello che vuoi


2) se utilizzo quelle impostazioni per lanciare il programma, funziona bene sotto eclipse ma se faccio un jar eseguibile non va affatto. Esiste un modo per creare un jar che imposti automaticamente la VM con i valori che mi servono? Altrimenti è abbastanza inutile..
Grazie

Non so se si possa fare, comunque puoi fare uno script che imposta quei parametri così come fa Eclipse stesso