Criação de arquivos de imagem muito grande com BufferedImage, problemas estranhos dependendo compilação e computador
-
12-09-2019 - |
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?
Solução
O seu aplicativo está sendo executado fora de memória - se eu calculado corretamente, que a imagem leva cerca de 280MB.
programasJava 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.