Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [Java] vector di vector, java result: 1 e java heap space error

    salve a tutti, sto lavorando a un programma dove devo riempire una matrice di dimensioni variabili con oggetti di classe Float. Mi sorge però un errore di java result: 1 per matrici di dimensioni 20000 x 20000 (nel senso che se gli chiedo di produrmi una matrice di quelle dimensioni, mi dà l'errore quando ha raggiunto una grandezza di 20000 x 165) e un altro errore, java heap space, spunta fuori per dimensioni più piccole; sotto ai 1250 circa, se non ricordo male, funziona perfettamente.

    Ho trovato il frammento di codice incriminato e l'ho semplificato ai minimi termini, ma l'errore (java result 1) continua a ripresentarsi. Eccolo qui di seguito:

    matrice = new Vector();

    for(int i = 0; i < nItems; i++){
    vettore = new Vector<Float>();

    for(int j = 0; j < nItems; j++){
    if(i <= j)
    vettore.add((float)1.0);
    else vettore.add((float)0.0);
    }

    matrice.add(vettore);
    }

    spero proprio che sia un mio errore di distrazione, perchè non riesco a capire da che parte sbaglio e ci sto sbattendo la testa da troppo tempo ormai

    vi ringrazio in anticipo per qualsiasi aiuto...

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [Java] vector di vector, java result: 1 e java heap space error

    Originariamente inviato da maestrozappa
    per matrici di dimensioni 20000 x 20000
    Ma fatti due calcoli ... no? 20000x20000x4 (4 è la dimensione di un float) = 1600000000 (cica 1,49 GByte). Ed ho contato solo lo spazio "crudo" per i float. Senza contare che i Vector e i Float sono oggetti (per ogni oggetto la JVM usa altro spazio per dettagli suoi interni) e i Vector hanno un array interno (altro oggetto) e altri dati di istanza. Insomma ... ancora di più.

    Quando si avvia la JVM, se non si specificano opzioni speciali, almeno per la VM "client" che io sappia, ha un heap di default con max 64 MB .....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    insomma dovrei proprio cambiare linguaggio di programmazione, giusto?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da maestrozappa
    insomma dovrei proprio cambiare linguaggio di programmazione, giusto?
    No, avviare la JVM specificando una dimensione molto maggiore di quella di default per l'heap!!
    Vedi la documentazione del tool 'java'.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    si ok, ma a quanto ne so non è possibile incrementare l'heap a runtime, o sbaglio? in tal caso, qualsiasi impostazione decida di mettere all'heap sarebbe insufficiente, perchè la mia matrice può dover raggiungere dimensioni abnormi in qualsiasi momento, e una modifica statica di tale limite è inutile. spero di sbagliarmi anche stavolta...

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da maestrozappa
    si ok, ma a quanto ne so non è possibile incrementare l'heap a runtime, o sbaglio?
    Ripeto: non puoi leggere la documentazione del tool 'java'??? Ti spiega chiaramente come viene stabilita la dimensione del heap e come passare dei parametri all'avvio per alterare la dimensione. La dimensione del heap comunque ha un "massimo".

    Originariamente inviato da maestrozappa
    in tal caso, qualsiasi impostazione decida di mettere all'heap sarebbe insufficiente, perchè la mia matrice può dover raggiungere dimensioni abnormi
    Tra l'altro hai l'hardware adatto??? intendo in particolare la RAM. Se già dal calcolo che ho fatto prima saltano fuori almeno 1,5GB .... beh è già una gran bella dimensione!!

    Originariamente inviato da maestrozappa
    in qualsiasi momento, e una modifica statica di tale limite è inutile.
    Ma tu devi sapere quanta memoria hai a disposizione sul tuo sistema .... e quella è!! E se la sai puoi dire alla JVM all'avvio: "guarda che la dimensione massima del heap deve essere tot". Questo puoi fare .... che cosa pretendi???
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    ok grazie per le indicazioni.

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.