Java.lang.OutOfMemoryError: Java heap space

3 respostas
Marques

Lista,

Como resolver esse erro que aparece (java.lang.OutOfMemoryError: Java heap space) no trecho de código abaixo?

Desesperadamente aguardando,

Marques

FormFile coletor = (FormFile) formBean.get("arquivoColetor");

		EanBgmaDAO eanBgmaDAO = EanBgmaDAOFactory
				.getEanBgmaDAO(EanBgmaDAOFactory.MYSQL);
		EanBgmaDTO conversor = null;

		VariedadeEmbalagemDAO variedadeEmbalagemDAO = VariedadeEmbalagemDAOFactory
				.getVariedadeEmbalagemDAO(VariedadeEmbalagemDAOFactory.MYSQL);
		VariedadeEmbalagemDTO variedadeEmbalagem = null;

		InputStream is = coletor.getInputStream();

		BufferedReader reader = new BufferedReader(new InputStreamReader(is));

		String linha = null;		

		while ((linha = reader.readLine()) != null) {			

			String[] campos = linha.split(";");

			if (campos.length == 76) {

				StringDTO dto = new StringDTO();

				if (numeroConteiner.equals(campos[47])) {
					conversor = eanBgmaDAO.recuperarConversor(campos[35]);
					variedadeEmbalagem = variedadeEmbalagemDAO
							.recuperarVariedadeEmbalagem(conversor
									.getIdVariedadeEmbalagem().intValue(),
									idAssociacao);

					String pallet = campos[3] + campos[4] + campos[2];
					String variedade = campos[36];
					String classeUva = campos[41] + campos[42];
					String marcaCaixa = campos[40];
					String sacola = campos[43];
					String caixas = campos[38];

					dto.setElem1(pallet);
					dto.setElem2(variedade);
					dto.setElem3(classeUva);
					dto.setElem4(marcaCaixa);
					dto.setElem5(sacola);
					dto.setElem6(caixas);
					dto.setElem7(variedadeEmbalagem.getPesoLiquido().toString());
					dto.setElem8(variedadeEmbalagem.getPesoBruto().toString());
					dto.setElem9(variedadeEmbalagem.getIdVariedadeEmbalagem().toString());
					palletsConteiner.add(dto);

					totalAssociados = totalizaAssociados(campos, totalAssociados, variedadeEmbalagem);
				}
			}
		}

		is.close();
		reader.close();

3 Respostas

R

Oi Marques,

teria como você colocar o stack trace aqui ? Você conseguiu isolar o trecho de código que está gerando o OutOfMemoryError? (seria dentro ou fora do loop?)

A principio não vejo grandes problemas. Uma saída paliativa seria aumentar a quantidade de memória destinada para a VM usando os parâmetros -Xms e -Xmx na linha de comando, ex: java -Xms256M -Xmx512M Teste

[]s

Marques

Rodrigo,

Esse erro acontece no servidor. Na minha máquina local o erro não acontece. Como executar essa informação (java -Xms256M -Xmx512M T) no servidor?

Muito obrigado,

Marques

R

Daria pra passar esses parâmetros se você tiver direitos administrativos no server que está rodando o container mas se for um servidor compartilhado (ex: Locaweb) já fica mais difícil.

A quantidade de informações processada pelo código é muito grande? Talvez valha a pena dar uma olhada nos métodos recuperarVariedadeEmbalagem() e totalizaAssociados().

Criado 5 de setembro de 2006
Ultima resposta 7 de set. de 2006
Respostas 3
Participantes 2