BufferedReader: massimo numero di righe

di il
5 risposte

BufferedReader: massimo numero di righe

Ciao a tutti,
che voi sappiate c'è un massimo numero di righe che si possano leggere da file utilizzando un BufferedReader?
Ho a che fare con un programma che deve leggere determinati dati per poi elaborarli. Ho a disposizione un file di testo con 21 milioni di righe e in teoria dovrebbe leggerle tutte. Impostando una variabile di tipo long che mi restituisce il numero di righe lette, il suo valore al termine dell'esecuzione del programma è di sole 1272208 righe. Stesso discorso se eseguo il programma passandogli come parametro un file da 1.200.000 righe, il risultato della variabile che conta le righe lette è sempre di 1272208. Testando il programma con un file da qualche centinaio di righe invece va tutto alla grande.

5 Risposte

  • Re: BufferedReader: massimo numero di righe

    DanPir ha scritto:


    che voi sappiate c'è un massimo numero di righe che si possano leggere da file utilizzando un BufferedReader?
    No, non c'è un "limite" in quel senso.

    DanPir ha scritto:


    Ho a che fare con un programma che deve leggere determinati dati per poi elaborarli. Ho a disposizione un file di testo con 21 milioni di righe e in teoria dovrebbe leggerle tutte. Impostando una variabile di tipo long che mi restituisce il numero di righe lette, il suo valore al termine dell'esecuzione del programma è di sole 1272208 righe. Stesso discorso se eseguo il programma passandogli come parametro un file da 1.200.000 righe, il risultato della variabile che conta le righe lette è sempre di 1272208. Testando il programma con un file da qualche centinaio di righe invece va tutto alla grande.
    Un po' vago .... bisognerebbe vedere cosa hai scritto. Se ad ogni readLine() incrementi una variabile anche solo di tipo int, il limite del contatore è di 2 miliardi e oltre (per la precisione 2147483647). Due miliardi .... non 21 milioni ....
  • Re: BufferedReader: massimo numero di righe

    Mi sono appena accorto di aver fatto un errore di distrazione. Per sbaglio assegnavo sempre lo stesso file anche se passavo come parametro file diversi. Quindi è logico che le righe lette erano sempre le stesse . Adesso il file da 1.200.000 righe viene letto riga per riga, mentre quello da 21 milioni di righe mi ha restituito il seguente errore:

    java.lang.OutofMemoryError: GC overheadlimit exceeded

    Ma questo penso sia dovuto ad altri problemi...

    Grazie mille!
  • Re: BufferedReader: massimo numero di righe

    DanPir ha scritto:


    java.lang.OutofMemoryError: GC overheadlimit exceeded

    Ma questo penso sia dovuto ad altri problemi...
    Beh, sì ... dipende da COSA ci fai con queste righe. Le tieni tutte in memoria (es. in una lista)? Oppure no ma per ciascuna riga crei altri oggetti e questi li tieni in memoria? E se sì, quali? Quanto occupano?

    Il punto è: se la tua applicazione ha DAVVERO bisogno di molta memoria, allora innanzitutto aumenta pure il heap-space massimo quando avvii la JVM. Se invece "non dovrebbe" occupare grosse quantità di memoria, allora un OutofMemoryError è generalmente perché si usano "male" gli oggetti.
  • Re: BufferedReader: massimo numero di righe

    Ogni riga letta contiene delle informazioni con la quale creo degli oggetti che poi vanno memorizzati in una hashtable. Quindi da quel che suppongo, la memoria viene occupata quasi totalmente da questa struttura dati. Come soluzione sto cercando di limitare il numero di oggetti in questa hashtable.
  • Re: BufferedReader: massimo numero di righe

    Non so quali "informazioni" hai e quali oggetti crei. Se ti va, chiarisci bene il contesto, così vediamo.

    Il consiglio semplice e immediato è: sfrutta di più gli oggetti, nel senso di RI-usarli. Gli oggetti "immutabili" (String, Integer e altri) sono assolutamente condivisibili e riutilizzabili.
Devi accedere o registrarti per scrivere nel forum
5 risposte