Ho un algoritmo che attualmente assegna una grande serie di doppie, che aggiorna e cerca di frequente. La dimensione dell'array è N^2/2, dove N è il numero di righe su cui opera l'algoritmo. Devo anche conservare una copia dell'intera cosa per scopi associati all'applicazione che circonda l'algoritmo.Come devo gestire un array molto grande in Java?
Naturalmente questo impone un limite al numero di righe che il mio algoritmo può gestire come ho la limitazione mucchio da affrontare. Fino a questo punto sono riuscito a chiedere alle persone che usano l'algoritmo di aggiornare l'impostazione -Xmx per allocare più spazio e che ha funzionato bene. Tuttavia, ora ho un vero problema in cui ho bisogno di questo array per essere più grande di quello che posso inserire in memoria.
ho già intenzione di cambiare il mio algoritmo per mitigare la necessità di questa grande varietà e hanno alcuni risultati promettenti in quel dominio. Tuttavia si tratta di una modifica sostanziale al processo e richiederà molto più lavoro prima che arrivi alla condizione molto lucido del mio codice corrente che opera nella produzione di grande successo ed è stato per diversi anni.
Quindi, mentre sto perfezionando il mio nuovo algoritmo, ho voluto estendere la vita di quello esistente e ciò significa affrontare la limitazione dell'heap associata all'assegnazione della mia vasta gamma di doppi.
La mia domanda è che cosa è il modo migliore di trattare con esso? Dovrei usare un nio FileChannel e un MappedByteBuffer, o c'è un approccio migliore. Se utilizzo l'approccio nio, quale tipo di impatto sulle prestazioni dovrei aspettarmi di fare rispetto a un array in-memory della stessa dimensione?
Grazie
Suppongo che non sia possibile elaborare i dati in blocchi? – Seth
Sfortunatamente non con questa implementazione. Questo è ciò che fa la mia nuova implementazione, ma ci sono tutta una serie di ulteriori problemi associati alla combinazione dei risultati del chunk. – Simon
hai considerato l'utilizzo di un database? – pstanton