Erro de compilation “Código muito grande” em Java

Existe algum tamanho máximo para o código em Java? Eu escrevi uma function com mais de 10.000 linhas. Na verdade, cada linha atribui um valor a uma variável de matriz.

arts_bag[10792]="newyorkartworld"; arts_bag[10793]="leningradschool"; arts_bag[10794]="mailart"; arts_bag[10795]="artspan"; arts_bag[10796]="watercolor"; arts_bag[10797]="sculptures"; arts_bag[10798]="stonesculpture"; 

E durante a compilation, eu recebo este erro: código muito grande

Como eu supero isso?

Um único método em uma class Java pode ter no máximo 64 KB de bytecode.

Mas você deve limpar isso!

Use o arquivo .properties para armazenar esses dados e carregue-os via java.util.Properties

Você pode fazer isso colocando o arquivo .properties em seu caminho de class e use:

 Properties properties = new Properties(); InputStream inputStream = getClass().getResourceAsStream("yourfile.properties"); properties.load(inputStream); 

Há um limite de tamanho de código de bytes de 64 K em um método

Dito isto, tenho que concordar com Richard; Por que você precisa de um método tão grande? Dado o exemplo no OP, um arquivo de propriedades deve ser suficiente … ou até mesmo um database, se necessário.

De acordo com a especificação Java Virtual Machine , o código de um método não deve ser maior que 65536 bytes :

O valor do item code_length deve ser menor que 65536.

Onde code_length é definido em §4.7.3 O Atributo de Code :

code_length : O valor do item code_length fornece o número de bytes na matriz de código para este método. O valor de code_length deve ser maior que zero; a matriz de códigos não deve estar vazia.

code[] : A matriz de códigos fornece os bytes reais do código da máquina virtual Java que implementam o método.

Isso parece um pouco como loucura. Você não pode inicializar a matriz lendo os valores de um arquivo de texto ou alguma outra fonte de dados?

Tente refatorar seu código. Há limite no tamanho do método em Java.

Como mencionado em outras respostas, há um limite de 64 KB de bytecode para um método (pelo menos no compilador java da Sun)

Também me faria mais sentido dividir esse método em mais methods – cada um atribuindo certas coisas relacionadas à matriz (pode fazer mais sentido usar uma ArrayList para fazer isso)

por exemplo:

 public void addArrayItems() { addSculptureItems(list); ... } public void addSculptureItems(ArrayList list) { list.add("sculptures"); list.add("stonesculpture"); } 

Como alternativa, você poderia carregar os itens de um recurso estático se eles fossem corrigidos como em um arquivo de propriedades

Eu já me deparei com esse problema. A solução que funcionou para mim foi refatorar e encolher o método para peças mais gerenciáveis. Como você, estou lidando com um método de quase 10 mil linhas. No entanto, com o uso de variables ​​estáticas, bem como funções modulares menores, o problema foi resolvido.

Parece haver uma solução melhor, mas usando o Java 8, não há nenhum …

Você pode adicionar outro método para criar espaço para seu código para espaço de dados adicional, você pode ter um método que está ocupando uma grande quantidade de espaço para dados. Tente dividir seus methods porque eu tive o mesmo problema e corrigi-lo, criando outro método adicional para os mesmos dados no meu código java Android, o problema foi embora depois que eu fiz isso.

Este erro às vezes ocorre devido a um código muito grande em uma única function … Para resolver esse erro, divida essa function em várias funções, como

 //Too large code function private void mySingleFunction(){ . . 2000 lines of code } //To solve the problem private void mySingleFunction_1(){ . . 500 lines of code } private void mySingleFunction_2(){ . . 500 lines of code } private void mySingleFunction_3(){ . . 500 lines of code } private void mySingleFunction_4(){ . . 500 lines of code } private void MySingleFunction(){ mySingleFunction_1(); mySingleFunction_2(); mySingleFunction_3(); mySingleFunction_4(); }