Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - memoria esaurita
Forum - Java - memoria esaurita

Avatar
Erreg (Normal User)
Newbie


Messaggi: 19
Iscritto: 13/12/2012

Segnala al moderatore
Postato alle 17:43
Venerdì, 31/01/2014
ciao a tutti
vorrei sviluppare un programma in Java ( uso NetBeans ) che dato un certo numero (N) di oggetti , mi proponga delle sequenze formate da tutti gli oggetti , filtrate e ordinate con dei parametri .
mi sono inceppato presto , la mia idea era quella sviluppare tutte le  conbinazioni (permutazioni) possibili di (N) assegnarle ad un array e successivamente andarle a filtrare , ma finché rimango entro i dieci numeri riesco a dimensionare l'array per contenere tutte le combinazioni , ma quando passo i dieci ..... il PC mi dice :vai al negozio e compra altra memoria .
ora mi chiedevo c'è qualche anima buona che mi vorrà dare qualche suggerimento per metodi alternativi ?
ciao !!!
Codice sorgente - presumibilmente Java

  1. package provamemoria;
  2.  
  3. public class ProvaMemoria {
  4.  
  5.     static String tutteLePermut[];
  6.     static int numPermut;
  7.  
  8.     public static void Permutazioni(int numero) {
  9.         /* in questa prima parte il metodo determina dato un numero
  10.          quante sone la permutazioni totali "  totpermut  "  */
  11.         int totpermut = numero;
  12.         int numerodue = totpermut - 1;
  13.         while (numerodue > 0) {
  14.             totpermut = totpermut * numerodue;
  15.             numerodue--;
  16.         }
  17.         numPermut = totpermut;// e le assegna alla variabile " numPermut "
  18.         System.out.println(" il numero totale delle permutazioni è   " + numPermut);
  19.         /* dimensiono l'array " tutteLePermut " in seguito conterrà tutte
  20.          le permutazioni  sviluppate una per ogni elemento
  21.          */
  22.         tutteLePermut = new String[numPermut];
  23.  
  24.     }
  25.  
  26.     public static void main(String[] args) {
  27.         ProvaMemoria.Permutazioni(5);
  28.     }
  29.  
  30. }


Ultima modifica effettuata da Erreg il 31/01/2014 alle 17:50
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 17:59
Venerdì, 31/01/2014
Potresti filtrare gli oggetti cosi' come vengono creati, senza memorizzarli nell'array... (crea un oggetto, vedi se il filtro lo permette, se lo permette aggiungilo all'array, se non e' permesso semplicemente non aggiungerlo all'array).


Il mio blog: https://piero.dev
PM Quote
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Segnala al moderatore
Postato alle 18:03
Venerdì, 31/01/2014
Tasto destro sul progetto poi -> properties -> run
nella voce "VM Options" scrivi
Codice sorgente - presumibilmente Plain Text

  1. -Xms512m -Xmx1024m



Ciè vuol dire che fai partire la java virtual machine con uno spazio minimo sull heap di 512mb e massimo 1gb..
Ovviamente dipende dalle performance dell'hardware installato nella tua macchina, quindi vedi tu se aumentare questi parametri.

ps: Netbeans lancia la tua applicazione con:
Codice sorgente - presumibilmente Plain Text

  1. java -Xms512m -Xmx1024m -jar yourApp.jar


netBeans semplifica solo la chiamata

PM Quote
Avatar
Erreg (Normal User)
Newbie


Messaggi: 19
Iscritto: 13/12/2012

Segnala al moderatore
Postato alle 21:32
Venerdì, 31/01/2014
prima di tutto grazie per le risposte ( istantanee )

per Pierotofy
ho pensato alla soluzione che proponi , però avrei il problema del dimensionamento dell'array , dovrei sovradimensionarlo oppure una volta raggiunto il limite massimo  fare un qualcosa tipo copia dei dati dell'array , creazione di un array più grande e incolla dei dati ( mi sembra un po incasinato visto il mio basso livello di conoscenza  ;).

per Bonny
ho provato ad assegnare una quantità di memoria maggiore ( -Xms512 -Xmx2048 ) o provato anche
( -Xms1024 -Xmx2048 )ma nella finestra di output di netbeans mi compare il messaggio :
Error occurred during initialization of VM
Too small initial heap
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

invece se provo ad avviare la parte di codice che ho postato con 12 anziché 5 il messaggio è il seguente :
il numero totale delle permutazioni è   479001600
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at provamemoria.ProvaMemoria.Permutazioni(ProvaMemoria.java:22)
    at provamemoria.ProvaMemoria.main(ProvaMemoria.java:27)
Java Result: 1

ciao e grazie ad entrambi :)

Ultima modifica effettuata da Erreg il 31/01/2014 alle 22:00
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 23:28
Venerdì, 31/01/2014


Il mio blog: https://piero.dev
PM Quote
Avatar
Erreg (Normal User)
Newbie


Messaggi: 19
Iscritto: 13/12/2012

Segnala al moderatore
Postato alle 22:36
Sabato, 01/02/2014
ok .
provo a vedere di capire qualcosa della classe ArrayList , vi aggiornerò
ciao e grazie

PM Quote