Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    50

    aumento dimensione array

    Salve a tutti!!

    devo fare un progetto didattico che mi richiede di usare un'array di booleani per implementare un BitSet. Non posso usare classi delle api java e la limitazione della memoria è data dalla grandezza dello heap (ho già inserito il parametro -Xmx1200M per ingrandire la memoria).
    Inizialmente l'array di booleani ha una grandezza 10 (inizialmente inserisce rimuove numeri piccoli) poi però nel test dato dal prof inserisce i numeri da 2 a 1000000000.
    Qui iniziano i problemi perchè ho dovuto implementare una funzione che mi aumenta la dimensione dell'array. Ecco la funzione:

    private void aumentaArray(int x) {
    int dim;
    Runtime R = Runtime.getRuntime();
    int memoriaLibera=(int) R.freeMemory();
    int memoriamas= (int) R.maxMemory();
    int memoriatotale= (int) R.totalMemory();

    //questo pezzo serve per determinare la dimensione dell'array di copia per farlo il più grande //possibile per inserire più valori e fare meno copie

    if((x*2)<= memoriaLibera){
    dim=x*2;
    } else if((x<=memoriaLibera-1)){

    dim=memoriaLibera-1;
    }
    else{
    if(z>memoriaLibera)
    z=1;
    dim=x+z;
    z=z*2;

    }

    //In questo caso creo l'array di Completamento perchè creare la copia mi sfora la memoria //quindi devo crearmi un'array per inserire gli ultimi elementi ma deve essere una dimensione //precisa, o meglio più grande

    if((memoriaLibera+(dim+insieme.length))>memoriamas ){
    open = true;
    completamento = new boolean[memoriatotale-(dim+insieme.length)+memoriaLibera];
    minCompletamento = 0;
    putcompletamento(x);

    } else {

    //array di copia
    boolean[] b = new boolean[dim];
    for (int i = 0; i < insieme.length; i++)
    b[i] = insieme[i];

    insieme = b;
    modCount++;
    }

    }

    Questo metodo funziona ma è arrangiatissimo e lento. Il problema che si presenta è che i valori di FreeMemory non sono attendibili e non capisco perchè (non è un problema di cast già controllato). se alloca un nuovo array di dimensione [memoriaLibera+10000] lo alloca tranquillamente perchè???????

    Potete aiutarmi a migliorare questo pezzo di codice?
    Grazie mille!

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    50
    Correzione...

    Utilizzare un'array di "completamento" è fuori specifica, quindi devo trovare un modo per inserire i 1000000000 elementi aumentando la dimensione dell'array senza usare strutture d'appoggio e senza che mi lanci eccezione di heap pieno...

    Grazie per l'aiuto!

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.