Kompilieren einer großen Datei if-else = StackOverflowError

Status
Nicht offen für weitere Antworten.
U

User33880213

Gast
Hallo zusammen,
ich bin gerade auf einen komischen Fehler gestoßen. Versuche eine Datei zu kompilieren welche aus einer WSDL generiert wurde. Diese beinhaltet ca. 7000 Zeilen nur if (...) { return ...; } else { ... usw.

Jetzt bekomme ich immer einen StackOverflowError.

Hier mein Aufruf (gekürzt):
Code:
javac.exe -source 1.5 -target 1.5 -verbose -deprecation -encoding Cp1252 -g -classpath ... -sourcepath "...\src" -d "...\classes" QuantityQualifierCode.java


Die Klasse QuantityQualifierCode sieht in ungefähr so aus (auch gekürzt):
Code:
public class QuantityQualifierCode implements java.io.Serializable {
    private java.lang.String value;
    private static final String _value1String = "Other";
    private static final String _value2String = "AcceptableUnserviceableQuantity";
    private static final String _value3String = "Accidents";
    private static final String _value4String = "Accounts";
    private static final String _value5String = "AccountsPayableAverageOverdueDays";
    ...

    public static final java.lang.String _value1 = new java.lang.String(_value1String);
    public static final java.lang.String _value2 = new java.lang.String(_value2String);
    public static final java.lang.String _value3 = new java.lang.String(_value3String);
    public static final java.lang.String _value4 = new java.lang.String(_value4String);
    public static final java.lang.String _value5 = new java.lang.String(_value5String);
    ...

    public static final QuantityQualifierCode value1 = new QuantityQualifierCode(_value1);
    public static final QuantityQualifierCode value2 = new QuantityQualifierCode(_value2);
    public static final QuantityQualifierCode value3 = new QuantityQualifierCode(_value3);
    public static final QuantityQualifierCode value4 = new QuantityQualifierCode(_value4);
    public static final QuantityQualifierCode value5 = new QuantityQualifierCode(_value5);
    ...

    protected QuantityQualifierCode(java.lang.String value) {
        this.value = value;
    }
    
    public java.lang.String getValue() {
        return value;
    }
    
    public static QuantityQualifierCode fromValue(java.lang.String value)
        throws java.lang.IllegalStateException {
        if (value1.value.equals(value)) {
            return value1;
        } else if (value2.value.equals(value)) {
            return value2;
        } else if (value3.value.equals(value)) {
            return value3;
        } else if (value4.value.equals(value)) {
            return value4;
        } else if (value5.value.equals(value)) {
            return value5;
        } else if (value6.value.equals(value)) {
          
        ...
   
        } else if (value1267.value.equals(value)) {
            return value1267;
        }
        throw new IllegalArgumentException();
    }
    
    public String toString() {
        return value.toString();
    }
    
    public boolean equals(java.lang.Object obj) {
        if (!(obj instanceof QuantityQualifierCode)) {
            return false;
        }
        return ((QuantityQualifierCode)obj).value.equals(value);
    }
    
    public int hashCode() {
        return value.hashCode();
    }
}

Die Fehlermeldung beim kompilieren sieht dann so aus:
Code:
 The system is out of resources.
 Consult the following stack trace for details.
 java.lang.StackOverflowError
 	at com.sun.tools.javac.jvm.Code.resolve(Code.java:1298)
 	at com.sun.tools.javac.jvm.Code.resolvePending(Code.java:1320)
 	at com.sun.tools.javac.jvm.Code.emitop(Code.java:307)
 	at com.sun.tools.javac.jvm.Code.emitop2(Code.java:913)
 	at com.sun.tools.javac.jvm.Items$StaticItem.load(Items.java:427)
 	at com.sun.tools.javac.jvm.Gen.visitSelect(Gen.java:2089)
 	at com.sun.tools.javac.tree.Tree$Select.accept(Tree.java:987)
 	at com.sun.tools.javac.jvm.Gen.genExpr(Gen.java:806)
 	at com.sun.tools.javac.jvm.Gen.visitSelect(Gen.java:2063)
 	at com.sun.tools.javac.tree.Tree$Select.accept(Tree.java:987)
 	at com.sun.tools.javac.jvm.Gen.genExpr(Gen.java:806)
 	at com.sun.tools.javac.jvm.Gen.visitApply(Gen.java:1604)
 	at com.sun.tools.javac.tree.Tree$Apply.accept(Tree.java:813)
 	at com.sun.tools.javac.jvm.Gen.genExpr(Gen.java:806)
 	at com.sun.tools.javac.jvm.Gen.genCond(Gen.java:786)
 	at com.sun.tools.javac.jvm.Gen.genCond(Gen.java:739)
 	at com.sun.tools.javac.jvm.Gen.visitIf(Gen.java:1535)
 	at com.sun.tools.javac.tree.Tree$If.accept(Tree.java:715)
 	at com.sun.tools.javac.jvm.Gen.genDef(Gen.java:653)
 	at com.sun.tools.javac.jvm.Gen.genStat(Gen.java:688)
 	at com.sun.tools.javac.jvm.Gen.genStat(Gen.java:674)
 	at com.sun.tools.javac.jvm.Gen.visitIf(Gen.java:1546)
 	at com.sun.tools.javac.tree.Tree$If.accept(Tree.java:715)
 	at com.sun.tools.javac.jvm.Gen.genDef(Gen.java:653)
 	at com.sun.tools.javac.jvm.Gen.genStat(Gen.java:688)
 	at com.sun.tools.javac.jvm.Gen.genStat(Gen.java:674)
 	at com.sun.tools.javac.jvm.Gen.visitIf(Gen.java:1546)
 	at com.sun.tools.javac.tree.Tree$If.accept(Tree.java:715)
 	at com.sun.tools.javac.jvm.Gen.genDef(Gen.java:653)


Ok sieht aus wie ein Recursiver Aufruf, tja ist es ja aber leider nicht.

Als Info:
- Ich habe bereits sämtliche Optionen mit -Xss -Xoos, Xmm und wie sie alle heissen durchprobiert => Interresiert nicht
- Ich habe unterschiedliche Kompiler (JDeveloper, Eclipse, Sun) genommen => Sche... egal
- Mit JDeveloper bspw. lässt die Datei sich kompilieren, der Aufruf ist jedoch absolut exakt zu meinem!!?!
- Wenn man von den 1267 Zeilen if-else Statements bis zu dem Eintrag mit dem Wert 741 löscht, dann kann der kompiler es!

Kann mir bitte irgend jemand helfen? Wäre wirklich wichtig für meine Studienarbeit.


Vielen Danke
 

Azriel

Neues Mitglied
Hallo,

ich vermute jetzt mal stark, das Du deshalb nicht kompilieren kannst, weil Du ca. 3500 statische String-Elemente hast.

Code:
static
in Java bedeutet, dass der so bezeichnete String auch ohne eine konkrete Instanz im Speicher angelegt wird. Entsprechend wird bei der Kompilierung mindestend 3500 mal im Speicher der Platz für einen Java-String reserviert und bleibt auch während des Vorgangs bestehen (Habe jetzt keine Lust auszurechen, wieviel Speicher das genau ist... kommt ja auch noch Overhead dazu und eventuell können auch Probleme beim Anlegen auftreten, etc.). Das kann schon zu dem beschriebenen Problem führen, wenn Du nicht so arg viel Hauptspeicher hast :wink:

Müssen die Elemente denn alle als static angelegt werden? Ich würde einfach mal das static entfernen, falls es nicht wirklich nötig ist! Ansonsten bleiben Dir noch die Wege des Aufteilens...

Hoffe, das hat geholfen.

MfG,

Azriel
 

Marco13

Top Contributor
Wenn du Einfluß auf die generierte Datei hast, solltest du die ganzen Strings vielleicht in ein Array packen, und mit einer Schleife durchlaufen, um die Abfragen nicht einzeln hinschreiben zu müssen. Aber wenn das nicht geht, weiß ich auch nicht, was man da machen könnte.
 
S

SlaterB

Gast
wenn man schon Einfuss hätte, dann reicht es vielleicht auch die unnötigen else zu löschen,
das ginge ja noch halbwegs per Text-Modifikation ;)
 
G

Gast

Gast
Danke für die schnelle Antwort:

ich vermute jetzt mal stark, das Du deshalb nicht kompilieren kannst, weil Du ca. 3500 statische String-Elemente hast

Wenn ich ein Großteil der if-else Blöcke weglösche dann kann er es ja. Die Statische Strig liegen denke ich sowieso nich auf dem Stack sonder maximal im Heap. Bekomme ja aber vom compiler einen StackoverflowError...


Wenn du Einfluß auf die generierte Datei hast...

Nein leider überhaupt nicht. Es handelt sich um einen WebserviceProxy generiert von Fuc.ing JDeveloper. Der haut da halt über 200 Klassen für eine WSDL raus :autsch:

wenn man schon Einfuss hätte, dann reicht es vielleicht auch die unnötigen else zu löschen,
das ginge ja noch halbwegs per Text-Modifikation

Bei der nächsten Änderung des Webservices würde alles überbügelt werden... Ach das ist doch alles kac.e was der da generiert :noe:


Sonst noch ne Idee??? Ich muss die Klasse von "Hand" kompilieren können da irgendwann der Maven oder Ant auch gehen sollte.[/code]
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
clemson Kompilieren nach einer früheren Version Allgemeine Java-Themen 4
E Source-Code aus einer Textdatei kompilieren und ausführen Allgemeine Java-Themen 4
O Maven ein externes jar laden ohne die Applikation neu zu kompilieren Allgemeine Java-Themen 4
A Zweite Service Klasse beim Kompilieren Allgemeine Java-Themen 6
B Compiler-Fehler Probleme beim Kompilieren mit Jsoup Allgemeine Java-Themen 8
G File not found - nach dem Kompilieren Allgemeine Java-Themen 6
J Konstruktor in JSP beim Kompilieren nicht gefunden Allgemeine Java-Themen 3
J Probleme bei kompilieren ... Bitte um Hilfe Allgemeine Java-Themen 2
E selber Klassen kompilieren/ prüfen Allgemeine Java-Themen 5
H Kompilieren funktioniert nicht Allgemeine Java-Themen 4
L JAR verändern - JAVAC soll einfach nur kompilieren, ohne Prüfungen Allgemeine Java-Themen 16
S Jar kompilieren Allgemeine Java-Themen 3
E Compiler-Fehler wie muss ich die entstandene Quellcode kompilieren?? Allgemeine Java-Themen 2
A JGoodies kompilieren Allgemeine Java-Themen 8
J Welche Informationen werden beim Kompilieren gespeichert? Allgemeine Java-Themen 3
C MidLet kompilieren javac Allgemeine Java-Themen 9
P Klasse mit Java 5 und 6 kompilieren Allgemeine Java-Themen 11
P NetBeans Project kompilieren Allgemeine Java-Themen 10
Norrit Quelltext beim Kompilieren ändern Allgemeine Java-Themen 7
H mit javac Verzeichnis kompilieren Allgemeine Java-Themen 2
L Wie für ein bestimmte JVM-Version kompilieren? Allgemeine Java-Themen 2
Noar Klasse lässt sich nicht kompilieren Allgemeine Java-Themen 2
V $ beim Kompilieren? Allgemeine Java-Themen 6
G komfortables kompilieren&ausführen Allgemeine Java-Themen 18
R Fehler beim kompilieren Allgemeine Java-Themen 8
H kompilieren -> komisch Allgemeine Java-Themen 7
S komplett in native kompilieren Allgemeine Java-Themen 6
Streeber Problem beim Kompilieren und Ausführen Allgemeine Java-Themen 20
O JNI Problem beim kompilieren Allgemeine Java-Themen 2
K Bildschirmauflösung beim Kompilieren Allgemeine Java-Themen 16
Reeny Dynamisch Klassen kompilieren Allgemeine Java-Themen 5
O Text aus einer Textdatei rausholen, der zwischen zwei Schlüsselworten steht Allgemeine Java-Themen 4
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
M Methodenübersicht einer Klasse einsehen Allgemeine Java-Themen 14
T JNA, Aufruf der Funktionen einer dll Allgemeine Java-Themen 5
I Vom Monolith zu Services in einer Webseite Allgemeine Java-Themen 1
W Variable Initialisierung mit dem Ergebnis einer Regex Allgemeine Java-Themen 1
O Werte einer Generic LinkedList zusammenrechenen Allgemeine Java-Themen 14
C Sortieren und Selektieren einer ArrayList<Point3D> Allgemeine Java-Themen 6
A Einzelne Objekte und Unterobjekte einer ArrayList ausgeben Allgemeine Java-Themen 53
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2
I Wie kann ich den Wert aus einer If abfrage ausgeben Allgemeine Java-Themen 23
S HTML einer Webseite 1:1 so bekommen wie es auch der Browser anzeigt? Allgemeine Java-Themen 14
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
J (Geplante) Änderungen an einer Datei vorübergehend speichern und anwenden? Allgemeine Java-Themen 12
ME2002 Fragen aus einer Java Klausur Allgemeine Java-Themen 67
_user_q Obfuscate einer .jar-Datei mit ProGuard? Allgemeine Java-Themen 2
_user_q Verknüpfung einer .jar-Datei (liegt z. B. auf dem Desktop) im Autostart-Ordner erstellen? Allgemeine Java-Themen 20
C Parsen einer sich updatenden Html mithilfe von jsoup Allgemeine Java-Themen 4
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
H Performance einer Monte-Carlo-Simulation verbessern Allgemeine Java-Themen 6
LimDul Kam eine java.net.URL zu einer HashMap und ging als DNS Anfrage wieder heraus Allgemeine Java-Themen 18
E Variablen Nach Übergabe einer Variable den Constructor aufrufen Allgemeine Java-Themen 16
Zeppi NullPointerException in einer if-Abfrage Allgemeine Java-Themen 6
D Abbruch einer ViewScoped Bean in Arbeit Allgemeine Java-Themen 2
Lukas2904 Schleife mit ansteuerung einer Klasse Allgemeine Java-Themen 5
d.lumpi Aus Einer Klasse auf ein Objekt einer anderen Klasse Zugreifen Allgemeine Java-Themen 1
Lukas2904 Wie kann man cps (ClicksPerSecond) in einer GUI anzeigen lassen? Allgemeine Java-Themen 4
O Produziert das Tool "jpackage" (ab JDK 14) .exe Dateien, die auf einer Zielumgebung ohne JRE lauffähig sind ?` Allgemeine Java-Themen 7
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
N BlueJ Implementation einer Analoguhr Allgemeine Java-Themen 0
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
N Speicherort einer Datei im Explorer ändern Allgemeine Java-Themen 8
O Datentypen Wie kann ich den Typ einer ArrayList abfragen ? Allgemeine Java-Themen 7
O Leerzeichen und Umlaute im Pfad einer Java Applikation machen Probleme Allgemeine Java-Themen 13
H Mehrere PNG-Files in einer Datei Allgemeine Java-Themen 9
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
J JSON Daten von einer Webseite erhalten Allgemeine Java-Themen 2
L RegEx für Teile einer Berechnung Allgemeine Java-Themen 14
L Erste Schritte TDD testen einer Methode mit injezierten Services? Allgemeine Java-Themen 12
J Zerlegen einer Zahl Allgemeine Java-Themen 6
Zrebna Wie kann man endgültig aus einer Rekursion ausbrechen? Allgemeine Java-Themen 14
MiMa Person in einer Arraylist hinzugügen mit Prüfung ? Allgemeine Java-Themen 6
Meeresgott Effizientester Weg um nach der Value einer verschachtelten Map aufzulösen Allgemeine Java-Themen 5
H Mehrere Datentypen in einer Arraylist speichern Allgemeine Java-Themen 9
MiMa Prüfziffer einer EAN Nummer berechnen Allgemeine Java-Themen 4
MiMa Erstellungsdatum einer Datei Allgemeine Java-Themen 10
Drachenbauer Wie kann ich einer existierenden Enum von außerhalb veränderte Werte zuweisen? Allgemeine Java-Themen 5
S HTML den ich von einer URL hole nicht identisch mit dem HTML im Browser Allgemeine Java-Themen 1
S Rückgabe einer HttpURLConnection für eine Seite einlesen bei der man eingeloggt ist..? Allgemeine Java-Themen 5
O Java-Applikation tut in Netbeans, als JAR nicht, wegen Pfadangaben einer benötigten Datei Allgemeine Java-Themen 8
M Hilfe bei einer Java Programmieraufgabe! Ab morgen Montag um 08:00 Uhr Allgemeine Java-Themen 5
J Algorithmen Analyse einer Schleife Allgemeine Java-Themen 6
Drachenbauer Wie finde ich den Aufrufer zu einer Methode, die sich nicht in meinem Projekt befindet? Allgemeine Java-Themen 2
J Die Letzte Zahl aus einer Text datei lesen Allgemeine Java-Themen 8
P einen public <Optinal String> in einer anderen Klasse mit einem Int vergleichen Allgemeine Java-Themen 2
A Mithilfe von einer Nummer einen Namen finden n-Beziehung Allgemeine Java-Themen 8
Scream_ilias Auf einer Website die anmeldedaten eingeben Allgemeine Java-Themen 9
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
I Lohnt sich heutzutage der Aufwand einer Portierung für MacOS Allgemeine Java-Themen 8
J Suchen von einer Scannereingabe in einem HashSet Allgemeine Java-Themen 1
M Konstruktor einer Methode Allgemeine Java-Themen 35
L Echtzeitdaten aus einer Webseite ziehen mit Java Allgemeine Java-Themen 19
V EMail, Attachments auslesen von einer Email Allgemeine Java-Themen 0
T Google Links in einer Liste Allgemeine Java-Themen 4
T Sinn einer toString Methode Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben