Criação de arquivos de imagem muito grande com BufferedImage, problemas estranhos dependendo compilação e computador

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

Pergunta

Eu estou tentando criar uma imagem muito grande em Java assim:

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

obviamente, a imagem é muito grande.

Agora, o problema que estou tendo é que ele parece funcionar bem 100% em alguns computadores, mas muito devagar sobre os outros (e sem isso não tem nada a ver com especificações).

O meu grande avanço mais veio em Eclipse, o IDE se recusou a realmente exibir a imagem e, em vez jogou um erro em um dos computadores que exibe a imagem muito devagar (leva uma quantidade considerável de tempo para redimensionar a imagem e afins) :

Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap espaço

Outro elemento interessante do erro é que, mesmo nos computadores corre lentamente no que eu posso redimensionar a janela está em até que a função pintura não está mais sendo chamado, em seguida, torná-lo grande novamente e se eu fazê-lo 'direito' que corridas com 100% de velocidade.

Não sei o que está acontecendo em tudo, todas as idéias?

Foi útil?

Solução

O seu aplicativo está sendo executado fora de memória - se eu calculado corretamente, que a imagem leva cerca de 280MB.

programas

Java tem uma quantidade máxima de memória que estão autorizados a usar (espaço de pilha), que é fixada quando a JVM é iniciada, e como esse limite é definido varia entre implementação e versões JVM. Quando você está correndo para fora da memória ou perto do limite, a JVM vai gastar muito tempo fazendo a coleta de lixo, que irá retardá-lo consideravelmente.

Pode ser que a única coisa que você tem a fazer é dar o aplicativo mais espaço pilha; isso é feito com a -Xmx parâmetro de linha de comando .

Outras dicas

O problema é com o tamanho da pilha do Java Virtual Machine -. Simplesmente não há o suficiente sobre os sistemas que jogou a OutOfMemoryError

Se o problema está ocorrendo com os sistemas executando o Sun JVM, é possível alterar o tamanho da pilha da JVM usando opções específicas do JVM da Sun .

A partir de do Sun Java 6, o valores padrão para o tamanho da pilha é determinada pela quantidade de memória do sistema , mas é também pode ser substituído pela opção -Xms que muda o tamanho de heap mínimo e -Xmx que muda o tamanho máximo de heap. Por tamanho padrão pilha mínimo é de 1/64 a quantidade de memória física, e máxima é de 1/4 a quantidade de memória física.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top