Sto valutando dati diversi da un file di testo in un algoritmo piuttosto grande.Limite di sovraccarico del GC Java superato - Soluzione personalizzata necessaria
Se il file di testo contiene più di datapoints (il minimo che mi serve è sth come 1,3 milioni di datapoint.) Dà il seguente errore:
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.util.regex.Matcher.<init>(Unknown Source)
at java.util.regex.Pattern.matcher(Unknown Source)
at java.lang.String.replaceAll(Unknown Source)
at java.util.Scanner.processFloatToken(Unknown Source)
at java.util.Scanner.nextDouble(Unknown Source)
quando sono in esecuzione in Eclipse con le seguenti impostazioni per il jre6 installato (di serie VM):
-Xms20m -Xmx1024m -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40 -XX:NewSize=10m
-XX:MaxNewSize=10m -XX:SurvivorRatio=6 -XX:TargetSurvivorRatio=80
-XX:+CMSClassUnloadingEnabled
Nota che funziona bene se corro solo attraverso una parte del file di testo.
Ora ho letto molto su questo argomento e sembra che da qualche parte devo avere una perdita di dati o sto memorizzando troppi dati in array (che credo di fare).
Ora il mio problema è: come posso aggirare questo?
- È possibile modificare le impostazioni in modo tale da poter eseguire ancora il calcolo o ho davvero bisogno di più potenza di calcolo? (non ho idea di dove ottenerlo)
- Ho letto da qualche parte che è meglio usare id e puntatori per la CPU piuttosto che inserire i dati negli array e lasciare che lo elabori. Ma come posso cambiare il mio codice in modo tale da fornire solo dei puntatori?
Fondamentalmente sto cercando alcune linee guida generali per prevenire un'enorme memoria/perdita di memoria.
Come possiamo essere certi di sapere esattamente cosa significa? Tutto quello che abbiamo è che tu * pensi * così. –
Ho letto questo: http://stackoverflow.com/questions/1393486/what-does-the-error-message-java-lang-outofmemoryerror-gc-overhead-limit-excee –
Penso che dovrai richiedere i servizi di un profiler per questo. Consiglio vivamente Visualgc. –