2012-04-21 13 views
6

Ich habe ein Projekt, an dem ich gearbeitet habe und alles lief gut bis heute. Ich habe fast 6000 Zeilen Code in einem Java-Klasse-Dokument. Wenn ich versuche, eine weitere IF-Klausel in den Code einzufügen, löst das Programm eine Exception aus, wenn die Klasse aufgerufen wird. Alle zusätzlichen Snippets, die ich versucht habe, in die Klasse zu platzieren, führen dazu, dass die Klasse beim Aufruf fehlschlägt. Ich habe versucht, Testcode hinzuzufügen, von dem ich weiß, dass er gut funktioniert, und sie alle werfen den Force-Close-Alarmdialog auf. Vertrauen Sie mir, dass mit dem letzten Ausschnitt, den ich in die Klasse zu bringen versuche, nichts falsch ist. Sobald ich das letzte "if" -Snippet herausnehme, gibt es keine Fehler. Hat das schon mal jemand gesehen? Die Ausnahme wird im Emulator ausgelöst, wenn die Klasse aufgerufen wird. Ich bekomme das Force-Close-Alert-Fenster. Hier ist die Java-Dateigröße: 172,503 Bytes Vielen Dank im Voraus!Gibt es eine Begrenzung für die Anzahl der Codezeilen, die Sie in eine Eclipse Java Doument setzen können?

+1

* "... das Programm löst eine Ausnahme aus, wenn die Klasse aufgerufen wird" *. Welche Ausnahme? Wo wird die Ausnahme ausgelöst? Durch Eclipse? Im laufenden Programm? Was meinst du mit "angerufen"? –

+2

Möglicherweise stoßen Sie auf die Größenbeschränkung für 64 KB (Bytecode). http://stackoverflow.com/questions/107855/is-there-any-no-of-lines-code-limit-for-a-java-class und http://stackoverflow.com/questions/5689798/why- Do-Java-Limit-the-Größe-von-Methode-zu-65535-Byte und http://StackOverflow.com/Questions/6570343/maximum-Size-of-Amethod-in-Java –

+7

ich sollte weisen Sie darauf hin, dass eine Klasse mit 6.000 Codezeilen ein ** WIRKLICH ** schlechtes Design anzeigt. Wenn Sie Ihren Code auf etwas Vernünftigeres umgestalten/modularisieren, sollte das Problem verschwinden. –

Antwort

3

Ich habe dieses Problem vor einiger Zeit entdeckt und herausgefunden, dass es kein Problem ist, 50k Zeilen und mehr Code in einem zu haben Klasse, solange das Methodenlimit nicht überschritten wird.

Je nachdem, was in einer einzigen Methode die Bytecode-Größe tatsächlich verursacht, habe ich Einschränkungen zwischen 2-3 k Zeilen Code/Methode erfahren.

hinzugefügt:

durch die Art und Weise an einem bestimmten Punkt in der Tat von Eclipse stürzt ab, wenn Ihr Gesamt Code zu groß wird zu kompilieren - zu 1 Gb erhöhen nur Speicher des Eclipse oder so. Bis jetzt war das genug für meine Projekte mit insgesamt ca. 100k Zeilen ...

+0

Ich zerhackte die Methode und leitete die anderen Klassen um die Brocken zu finden, funktioniert es wie ein Charme. Die Methodengröße wurde überschritten. Dieser hat mich einen ganzen Tag gekostet. Aber was ist ein Tag im Leben eines Nubs wert LOL – lastshadowrider

+0

@lastshadowrider Nur neugierig, wie viele Zeilen hatte Ihre Methode für den Absturz? – blessenm

+0

etwa 5.980 Zeilen bevor es abgestürzt ist. Ich dachte, ich würde einfach weiter zu der Methode hinzufügen, weil alles gut funktionierte. Und dann Boom. – lastshadowrider

1

Ich habe das schon bemerkt, Eclipse läuft von Java selbst ab, daher ist es sehr RAM-intensiv, wenn Sie zu viel Code haben, so dass mehr benötigt wird, als zugewiesen werden kann, wird es abstürzen.

+3

Wie viel ist zu viel? Die gesamte apk ist nur 512kb. – lastshadowrider

4

können Sie die gleichen mit folgenden Einstellungen ändern:

--launcher.XXMaxPermSize 
256m 
--launcher.defaultAction 
openFile 
-vmargs 
-Dosgi.requiredJavaVersion=1.5 
-Xms40m 
-Xmx512m 
+0

Wo gebe ich diese Aussagen ab? – lastshadowrider

+0

öffnen Sie die Datei eclipse.ini und ändern Sie die Einstellungen – Satya

+0

Danke für die Hilfe Satya – lastshadowrider

1

Gibt es eine Begrenzung für die Anzahl der Codezeilen Sie in einem Eclipse-Java-doument setzen.

Nicht genau.

Es gibt Beschränkungen für die Anzahl der Bytecodes in einer kompilierten Methode und andere Dinge wie diese, aber diese werden durch das Java-Klassendateiformat (d. H. Die JVM-Spezifikation) und nicht durch Eclipse auferlegt.

Es ist auch möglich, dass Eclipse mehr Speicher benötigt, obwohl ich nicht glaube, dass das Hinzufügen einer einzelnen if-Anweisung dies zuverlässig auslösen würde. (Und wenn es so wäre, würde die Ausnahme Ihnen sagen, dass Sie keinen Speicher mehr hatten ...)

Verwandte Themen