Existe-t-il une taille maximale pour le code en Java? J'ai écrit une fonction avec plus de 10 000 lignes. En réalité, chaque ligne attribue une valeur à une variable de tableau.
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";
Et lors de la compilation, j'obtiens cette erreur: code trop gros
Comment puis-je surmonter cela?
Une seule méthode dans une classe Java peut contenir au plus 64 Ko de bytecode.
Mais vous devriez nettoyer cela!
Utilisez le fichier .properties
pour stocker ces données et chargez-le via Java.util.Properties
Vous pouvez le faire en plaçant le fichier .properties
sur votre chemin de classe et utilisez:
Properties properties = new Properties();
InputStream inputStream = getClass().getResourceAsStream("yourfile.properties");
properties.load(inputStream);
Selon la spécification Java Virtual Machine , a le code d'une méthode ne doit pas dépasser 65 536 octets :
La valeur de l'élément
code_length
doit être inférieure à 65536.
Où code_length
est défini dans §4.7.3 L'attribut Code
:
code_length
: La valeur de l'itemcode_length
donne le nombre d'octets dans le tableau de code pour cette méthode. La valeur de code_length doit être supérieure à zéro; le tableau de code ne doit pas être vide.
code[]
: le tableau de code donne les octets réels du code de la machine virtuelle Java qui implémente la méthode.
Cela ressemble un peu à la folie. Ne pouvez-vous pas initialiser le tableau en lisant les valeurs d'un fichier texte ou d'une autre source de données?
Essayez de refactoriser votre code. La taille de la méthode est limitée en Java.
Comme mentionné dans d'autres réponses, il existe une limite de 64 Ko de bytecode pour une méthode (au moins dans le compilateur Java de Sun)
Il serait également plus logique de diviser cette méthode en plusieurs méthodes, chacune affectant certains éléments liés au tableau (il serait peut-être plus judicieux d'utiliser un ArrayList pour le faire)
par exemple:
public void addArrayItems()
{
addSculptureItems(list);
...
}
public void addSculptureItems(ArrayList list)
{
list.add("sculptures");
list.add("stonesculpture");
}
Sinon, vous pouvez charger les éléments à partir d'une ressource statique s'ils sont corrigés comme dans un fichier de propriétés.
Vous pouvez ajouter une autre méthode pour créer de l'espace pour votre code pour un espace de données supplémentaire. Vous pouvez utiliser une méthode prenant beaucoup d'espace de données. Essayez de diviser vos méthodes parce que j'ai le même problème et corrigez-le en créant une autre méthode supplémentaire pour les mêmes données dans mon code Java Android.
J'ai rencontré ce problème moi-même. La solution qui a fonctionné pour moi a été de refactoriser et de réduire la méthode à des éléments plus faciles à gérer. Comme vous, je suis confronté à une méthode de ligne proche de 10K. Cependant, avec l’utilisation de variables statiques et de fonctions modulaires plus petites, le problème a été résolu.
Il semblerait qu'il y aurait une meilleure solution de contournement, mais en utilisant Java 8, il n'y en a pas ...
Cette erreur est parfois due à un code trop volumineux dans une seule fonction .... Pour résoudre cette erreur, divisez cette fonction en plusieurs fonctions, telles que
//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();
}