La creazione di grandi file di immagini con BufferedImage, problemi strani a seconda compilation e il computer

StackOverflow https://stackoverflow.com/questions/961795

Domanda

Sto tentando di creare una grande immagine in Java in questo modo:

BufferedImage bi = new BufferedImage (58240, 1664, BufferedImage.TYPE_INT_RGB);

, ovviamente, l'immagine è molto grande.

Ora il problema che sto avendo è che sembra funzionare bene al 100% su alcuni computer, ma molto lentamente agli altri (e senza questo non ha nulla a che fare con le specifiche).

La mia svolta più importante è venuto in Eclipse, l'IDE ha rifiutato di visualizzare in realtà l'immagine e invece ha gettato un errore su uno dei computer che visualizza l'immagine molto lentamente (prende una notevole quantità di tempo per ridimensionare l'immagine e simili) :

Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: spazio heap Java

Un altro elemento interessante dell'errore è che anche sui computer che gira lentamente sul riesco a ridimensionare la finestra che è fino a quando non viene più chiamata la funzione di vernice, poi fare di nuovo grande e se lo faccio 'giusto' esso corre con il 100% della velocità.

Non sei sicuro di quello che sta succedendo a tutti, tutte le idee?

È stato utile?

Soluzione

La vostra applicazione è in esecuzione di memoria - se ho calcolato correttamente, che l'immagine è di circa 280MB.

programmi Java hanno una quantità massima di memoria di avere il permesso di usare (lo spazio di heap), che è fissato all'avvio del JVM, e come questo limite è fissato varia tra l'attuazione JVM e le versioni. Quando sei a corto di memoria o vicino al limite, la JVM si spendono un sacco di tempo a fare la raccolta dei rifiuti, che rallentarlo sensibilmente.

Può essere che l'unica cosa che devi fare è quello di dare l'applicazione più spazio heap; questo è fatto con l'href="http://java.sun.com/javase/6/docs/technotes/tools/windows/java.html#options" rel="nofollow noreferrer"> parametro della riga di comando .

Altri suggerimenti

Il problema è con la dimensione heap della Java Virtual Machine -. Non solo non è sufficiente sui sistemi che hanno gettato il OutOfMemoryError

Se il problema si verifica con sistemi che eseguono il Sun JVM, è possibile modificare la dimensione mucchio di JVM utilizzando opzioni specifiche per la JVM di Sun .

A partire dal Sun Java 6, il valori di default per la dimensione heap è determinato dalla quantità di memoria di sistema , ma è anche possono essere sostituite dall'opzione -Xms che cambia la dimensione minima dell'heap e -Xmx che cambia la dimensione massima heap. Per default dimensione minima heap è 1/64 della quantità di memoria fisica, e massima è 1/4 la quantità di memoria fisica.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top