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.