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 Arrayvariablen einen Wert zu.
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";
Und beim Kompilieren erhalte ich folgende Fehlermeldung: Code zu groß
Wie überwinde ich das?
java
arrays
compiler-errors
code-size
Dreieinigkeit
quelle
quelle
Antworten:
Aber du solltest das aufräumen!
Verwenden Sie die
.properties
Datei, um diese Daten zu speichern und über zu ladenjava.util.Properties
Sie können dies tun, indem Sie die
.properties
Datei in Ihrem Klassenpfad platzieren und Folgendes verwenden:quelle
Es gibt eine Größenbeschränkung von 64 KByte für eine Methode
Trotzdem muss ich Richard zustimmen; Warum brauchen Sie eine so große Methode? In Anbetracht des Beispiels im OP sollte eine Eigenschaftendatei ausreichen ... oder bei Bedarf sogar eine Datenbank.
quelle
enum
zu sehenGemäß der Java Virtual Machine Spezifikation , muss der Code einer Methode nicht größer als 65536 Bytes sein :
code_length
definiert die Größe descode[]
Attributs, das den tatsächlichen Bytecode einer Methode enthält:quelle
Das scheint ein bisschen wie Wahnsinn. Können Sie das Array nicht durch Lesen der Werte aus einer Textdatei oder einer anderen Datenquelle initialisieren?
quelle
Versuchen Sie, Ihren Code umzugestalten. Die Größe der Methode in Java ist begrenzt.
quelle
Wie in anderen Antworten erwähnt, gibt es für eine Methode ein Bytecode-Limit von 64 KB (zumindest im Java-Compiler von Sun).
Für mich wäre es sinnvoller, diese Methode in mehrere Methoden aufzuteilen - jede weist dem Array bestimmte verwandte Dinge zu (möglicherweise ist es sinnvoller, eine ArrayList zu verwenden, um dies zu tun).
beispielsweise:
Alternativ können Sie die Elemente aus einer statischen Ressource laden, wenn sie wie aus einer Eigenschaftendatei behoben sind
quelle
Ich bin selbst auf dieses Problem gestoßen. Die Lösung, die für mich funktioniert hat, bestand darin, die Methode zu überarbeiten und auf handlichere Teile zu verkleinern. Wie Sie habe ich es mit einer fast 10K-Linienmethode zu tun. Mit der Verwendung statischer Variablen sowie kleinerer modularer Funktionen wurde das Problem jedoch gelöst.
Es scheint eine bessere Problemumgehung zu geben, aber mit Java 8 gibt es keine ...
quelle
Dieser Fehler tritt manchmal aufgrund von zu großem Code in einer einzelnen Funktion auf ... Um diesen Fehler zu beheben, teilen Sie diese Funktion in mehrere Funktionen auf, z
quelle
Sie können eine weitere Methode hinzufügen, um Platz für Ihren Code für zusätzlichen Datenraum zu schaffen. Möglicherweise verfügen Sie über eine Methode, die viel Datenraum beansprucht. Versuchen Sie, Ihre Methoden zu teilen, da ich das gleiche Problem hatte, und beheben Sie es, indem Sie eine weitere zusätzliche Methode für die gleichen Daten in meinem Java-Android-Code erstellen. Das Problem war danach behoben.
quelle
Ich habe eine Aufzählung, die bewirkt, dass die Java-Datei über 500 KB groß ist. Eclipse kann es aus irgendeinem Grund bauen; Die von Eclipse exportierte Ameise build.xml kann nicht. Ich schaue mir das an und werde diesen Beitrag aktualisieren.
quelle
Da es eine Größenbeschränkung für Methoden gibt und Sie Ihren Code in diesem Moment nicht neu gestalten möchten, können Sie das Array möglicherweise in 4-5 Teile aufteilen und diese dann in verschiedene Methoden einteilen. Rufen Sie zum Zeitpunkt des Lesens des Arrays alle Methoden einer Reihe auf. Sie können auch einen Zähler verwalten, um zu wissen, wie viele Indizes Sie analysiert haben.
quelle
Dies ist auf den gesamten Code in der Einzelmethodenlösung zurückzuführen: Erstellen Sie mehr kleine Methoden, dann ist dieser Fehler behoben
quelle
ok, vielleicht ist diese Antwort zu spät, aber ich denke, dieser Weg ist besser als ein anderer
Zum Beispiel haben wir 1000 Zeilendaten im Code
Brich sie
Für eine bessere Leistung geben Sie ein "Wenn" in Ihre Codes ein
Ich hoffe dieser Code hilft Ihnen
quelle