"Code zu groß" Kompilierungsfehler in Java

70

Gibt es eine maximale Größe für Code in Java? Ich habe eine Funktion mit mehr als 10.000 Zeilen geschrieben. Tatsächlich weist jede Zeile einer Array-Variablen einen Wert zu.

%Vor%

Und beim Kompilieren bekomme ich diesen Fehler: Code zu groß

Wie überwinde ich das?

    
trinity 09.03.2010, 09:33
quelle

9 Antworten

72
  

Eine einzelne Methode in einer Java-Klasse darf höchstens 64 KB Bytecode enthalten.

Aber Sie sollten das aufräumen!

Verwenden Sie .properties file zum Speichern dieser Daten und laden Sie sie über java.util.Properties

Sie können dies tun, indem Sie die Datei .properties auf Ihren Klassenpfad setzen und Folgendes verwenden:

%Vor%     
Bozho 09.03.2010, 09:35
quelle
10

Für eine Methode

gibt es eine Größenbeschränkung von 64 KB

Nachdem ich das gesagt habe, muss ich Richard zustimmen; Warum brauchst du eine so große Methode? Angesichts des Beispiels im OP sollte eine Eigenschaftendatei genügen ... oder sogar eine Datenbank, falls erforderlich.

    
Everyone 09.03.2010 09:36
quelle
9

Laut der Java Virtual Machine-Spezifikation sollte Der Code einer Methode darf nicht größer als 65536 Byte sein :

  

Der Wert des Elements code_length muss kleiner als 65536 sein.

Wo code_length in §4.7.3 definiert ist co_de% Attribut :

  

Code : Der Wert des Elements code_length gibt die Anzahl der Bytes im Code-Array für diese Methode an. Der Wert von code_length muss größer als Null sein. Das Code-Array darf nicht leer sein.

     

code_length : Das Code-Array gibt die tatsächlichen Bytes des Java Virtual Machine-Codes an, die die Methode implementieren.

    
Joachim Sauer 09.03.2010 09:47
quelle
8

Das scheint ein bisschen wie Wahnsinn zu sein. Können Sie das Array nicht initialisieren, indem Sie die Werte aus einer Textdatei oder einer anderen Datenquelle lesen?

    
RichardOD 09.03.2010 09:35
quelle
3

Versuchen Sie, Ihren Code umzuformulieren. Die Größe der Methode in Java ist begrenzt.

    
Padmarag 09.03.2010 09:39
quelle
2

Wie in anderen Antworten erwähnt, gibt es eine 64 KB Bytecode-Begrenzung für eine Methode (zumindest in Suns Java-Compiler)

Zu mir wäre es sinnvoller, diese Methode in mehrere Methoden aufzuteilen, die jeweils bestimmte verwandte Dinge dem Array zuweisen (dies könnte sinnvoller sein, um eine ArrayList zu verwenden)

zum Beispiel:

%Vor%

Alternativ können Sie die Elemente aus einer statischen Ressource laden, wenn sie wie in einer Eigenschaftendatei

festgelegt sind     
saret 09.03.2010 09:44
quelle
1

Sie können eine weitere Methode hinzufügen, um Speicherplatz für Ihren Code für zusätzlichen Datenbereich zu schaffen. Möglicherweise verfügen Sie über eine Methode, die viel Speicherplatz in Anspruch nimmt. Versuchen Sie, Ihre Methoden zu teilen, weil ich das gleiche Problem hatte, und beheben Sie es, indem Sie eine weitere Methode für die gleichen Daten in meinem Java-Code erstellen. Das Problem war weg, nachdem ich das getan hatte.

    
FermDroi 23.12.2015 11:05
quelle
0

Ich bin selbst auf dieses Problem gestoßen. Die Lösung, die für mich funktionierte, bestand darin, die Methode zu überschaubaren Stücken umzuformen und zu verkleinern. Wie Sie, habe ich es mit einer fast 10K Zeilen Methode zu tun. Mit der Verwendung von statischen Variablen sowie kleineren modularen Funktionen wurde das Problem jedoch gelöst.

Scheint, es gäbe eine bessere Problemumgehung, aber mit Java 8 gibt es keine ...

    
Azadi B. 26.09.2014 23:31
quelle
-1

Dieser Fehler tritt manchmal aufgrund zu großen Codes in einer einzigen Funktion auf ... Um diesen Fehler zu lösen, teilen Sie diese Funktion in mehrere Funktionen auf, z. B.

%Vor%     
Muhammad Umar Farooq 23.07.2017 05:54
quelle