Limite excedido de bytes

8 respostas
Beynner

“The code of construtor teste() is exceeding the 65535 bytes limit”

Estou fazendo um projeto com muitos calculos. Estava usando 200 arrays (com 50 variáveis cada um) e compilava de boa. Quando passei a usar 250 arrays já deu esse erro e meu objetivo é chegar a 1000 arrays. Alguém sabe me dizer que limite é esse?

Eu fiz alguns testes e até 211 arrays ele aceita, com 212 já era

8 Respostas

kaique

Cara, eu programo em superWaba, e ele também tem esse tipo de problema. No caso dele, a resposta é que a sua VM só suporta objetos em memória até esse limite que você especificou, passando disso dá “pau” na VM. Agora, se você está rodando isso numa VM Java, nunca vi isso acontecer. Mas tenta ver se tem algo relacionado com o que acontece com o Superwaba…pelo menos é uma pista…

[]'s.

vanzella

posta o codigo ai veio

peczenyj

quantas linhas tem o seu arquivo .java?

Eu imagino que deve passar das 350… :wink:

J

Não sei se isso ajuda, mais aí vai.

Tem um post do daltoncamargo referente a setar memória máxima e mínima de um sistema:

http://www.javafree.org/javabb/viewtopic.jbb?t=839

Beynner

kaique:
Cara, eu programo em superWaba, e ele também tem esse tipo de problema. No caso dele, a resposta é que a sua VM só suporta objetos em memória até esse limite que você especificou, passando disso dá “pau” na VM. Agora, se você está rodando isso numa VM Java, nunca vi isso acontecer. Mas tenta ver se tem algo relacionado com o que acontece com o Superwaba…pelo menos é uma pista…

[]'s.

Uso a JVM. Valeu pela dica, vou dar uma pesquisada pra ver. Mas acho que vou colocar essas informações no banco, creio que não dá pau. Estou com a classe sobrecarregada.

Beynner

putz… criei uma classe somente para declarar as variáveis(e são muitas). Creio que não tem como postar isso tudo.

Beynner

peczenyj:
quantas linhas tem o seu arquivo .java?

Eu imagino que deve passar das 350… ;-)

Quando eu uso os 211 arrays que compila normal, uso 242 linhas, mas quando acrescento mais um array da erro. Se não colocar array e acrescentar mais linhas com outros codigos ele funciona. O problemas está nesses arrays(creio eu).
Será que o problema acaba se colocar tudo isso no banco?
VLW

T

Beynner:
“The code of construtor teste() is exceeding the 65535 bytes limit”

Estou fazendo um projeto com muitos calculos. Estava usando 200 arrays (com 50 variáveis cada um) e compilava de boa. Quando passei a usar 250 arrays já deu esse erro e meu objetivo é chegar a 1000 arrays. Alguém sabe me dizer que limite é esse?

Eu fiz alguns testes e até 211 arrays ele aceita, com 212 já era

O que o compilador está lhe avisando é que um limite que existe no Java, referente ao tamanho de um .class, foi excedido.
Isso ocorreu porque você está inicializando seus dados dentro do seu programa, em vez de fazê-lo lendo de um arquivo externo.
É que a definição da JVM é burra o suficiente para não aceitar arrays inicializados com constantes.

  • Espera aí, mas isto o compilador aceita direitinho!
...
double[] dadosMeteorologicos = {
0.034899496702500971645995181625333, // 01
0.052335956242943832722118629609078, // 02
0.069756473744125300775958835194143, // 03
0.087155742747658173558064270837474, // 04
...
0.98480775301220805936674302458952 // 100
};

O que o compilador faz é o seguinte: ele pega o seu construtor sem parâmetros e gera código que é equivalente ao seguinte, antes de todos os seus comandos:

{
    dadosMeteorologicos = new double[100];
    dadosMeteorologicos [0] = 0.034899496702500971645995181625333;
    dadosMeteorologicos [1] = 0.052335956242943832722118629609078;
    dadosMeteorologicos [2] = 0.069756473744125300775958835194143;
    ...
    dadosMeteorologicos [99] = 0.087155742747658173558064270837474;
}

Como você viu, é um bocadinho estúpido.

Não há na JVM um jeito de especificar, dentro do .class, um bloco inteiro de constantes que evite essa geração desse código boboca que você viu. É por isso que se você declarar arrays com inicializadores muito grandes o tal limite é estourado rapidamente.

Então para evitar os tais problemas de geração de código, em vez de meter os dados dentro do seu código, leia-os a partir de um arquivo qualquer.

Criado 11 de dezembro de 2007
Ultima resposta 12 de dez. de 2007
Respostas 8
Participantes 6