selbes Projekt unterschiedliche Größe der jar-Datei

Allgemeine Themen rund um NetBeans

Moderator: wegus

Benutzeravatar
kodela
Beiträge: 60
Registriert: 21.12.2009, 14:34
Wohnort: Landsberg am Lech
Kontaktdaten:

selbes Projekt unterschiedliche Größe der jar-Datei

Beitragvon kodela » 03.07.2014, 23:11

Hallo,

ich habe auf zwei Rechnern, einem stationären (mit Win 7/64) und einem mobilen (mit Vista/32), das selbe Java-Projekt.

Wenn ich länger unterwegs bin übernehme ich das Projekt vom stationären auf den mobilen Rechner und wenn ich zurück komme und habe an den Daten Änderungen vorgenommen wird das komplette Objekt vom mobilen Rechner wieder auf den stationären übertragen.

Auf beiden Rechnern habe ich die selbe NetBeans-Installation (8.0) und das selbe JDK (1.7 und 1.8). Die Anzahl der Ordner (23/21) und Dateien (477/476) ist bei beiden Rechnern für das Projekt nahezu identisch. Lediglich ist beim stationären Rechner unter dem Ordner nbproject\private der Unterordner profiler mit 2 Dateien angelegt (mit dem mobilen Rechner habe ich den Profiler noch nicht verwendet) und bei jedem Compilerlauf wir dort der leere Ordner depcache angelegt (daher 2 Ordner mehr). Dafür gibt es auf dem mobilen Rechner eine desktop.ini (Dateien stat: + 2 - mob: + 1, daher Diff = 1).

Obwohl alles andere auf beiden Rechnern identisch ist, hat beim stationären Rechner die compilierte jar-Datei eine Größe von 230 KB und auf dem mobilen Rechner von 518 KB. Damit ist sie mehr als doppelt so groß. Beide Dateien arbeiten jedoch einwandfrei.

Kann mir jemand sagen, an was dieser beträchtliche Größenunterschied liegt?

MfG, kodela

Benutzeravatar
Baldur
Beiträge: 152
Registriert: 21.11.2008, 16:36

Re: selbes Projekt unterschiedliche Größe der jar-Datei

Beitragvon Baldur » 04.07.2014, 02:19

Da JAR-Dateien nichts anderes sind als ZIP-Dateien kannst du sie mit einem ensprechendem Programm öffnen/entpacken und vergleichen (ggf vorher in .zip umbenennen, damit du sie entpacken kannst). Dabei solltest du sicherstellen, daß du auch versteckte Dateien siehst.

Kandidaten könnten z.B. irgendwelche Backup-Dateien sein, Konfig-Dateien von der Versionsverwaltung oder sowas wie die desktop.ini. Sollte sich aber leicht finden lassen, wenn du die Dateien entpackst und vergleichst.

Benutzeravatar
kodela
Beiträge: 60
Registriert: 21.12.2009, 14:34
Wohnort: Landsberg am Lech
Kontaktdaten:

Re: selbes Projekt unterschiedliche Größe der jar-Datei

Beitragvon kodela » 04.07.2014, 08:42

Hallo Baldur,

danke für Deinen Hinweis. Eigentlich hätte mir das auch selbst einfallen müssen. Habe ja schon mehrfach jar-Dateien mit dem 7z-Manager geöffnet.

Hier das exemplarische Ergebnis für eine Quelldatei und die daraus erzeugte class-Datei ungepackt sowie gepackt:

LevelLoeser.java:
Rechner stat: 121 KB
Rechner mob: 121 KB

LevelLoeser.class:
Rechner stat: 19182 Byte
Rechner mob: 29325 Byte

LevelLoeser.class (gepackt):
Rechner stat: 6438 Byte
Rechner mob: 29325 Byte

Der Unterschied ist nicht bei allen Objekten so groß, aber man kann sagen, dass der Größenunterschied beider jar-Dateien einmal darin liegt, dass die erzeugten class-Dateien auf dem mobilen Rechner generell schon einmal größer sind, als auf dem stationären. Zum Zweiten werden auf dem mobilen Rechner alle Objekte (z.B. auch Bilddateien) nicht mehr komprimiert, auf dem stationären Rechner aber sehr wohl.

Es gibt also zwei unterschiedliche Verhaltensweise, einmal die Codeerzeugung generell und zum anderen die Komprimierung. Zu letzterem habe ich nach meiner Erinnerung schon einmal eine entsprechende Option gesehen, kann aber im Augenblick nicht sagen, wo.

Vielleicht kannst Du mir für beide Verhaltensweisen etwas sagen.

MfG, kodela

Benutzeravatar
smurfi
Site Admin
Beiträge: 1605
Registriert: 29.06.2006, 11:33
Wohnort: Wuppertal
Kontaktdaten:

Re: selbes Projekt unterschiedliche Größe der jar-Datei

Beitragvon smurfi » 04.07.2014, 08:54

Hallo,

das mit der Kompression findest du in den Projekt-Properties.

NetBeansProperties.png
NetBeansProperties.png (53.9 KiB) 5150 mal betrachtet


Gruß
Michael

Benutzeravatar
kodela
Beiträge: 60
Registriert: 21.12.2009, 14:34
Wohnort: Landsberg am Lech
Kontaktdaten:

Re: selbes Projekt unterschiedliche Größe der jar-Datei

Beitragvon kodela » 04.07.2014, 15:01

Hallo Michael,

danke für den Hinweis. Durch die Aktivierung der Option "Compress JAR File" ist die JAR-Datei nun von 518 KB immerhin schon auf 219 KB geschrumpft, aber doch noch deutlich über den 230 KB der JAR-Datei von meinem stationären Rechner.

Das alles ist nicht von besonderer Wichtigkeit. Ob eine Datei 230 oder 518 KB hat, ist heute ziemlich belanglos. Trotzdem ist es interessant, warum es unter den gleichen Bedingungen zu solch unterschiedlichen Ergebnissen kommt.

Übrigens, NetBeans schafft es, selbst bereits komprimierte Dateien nochmals zu verkleinern. Ein extremes Beispiel dazu:

Eine PNG-Datei mit einer Größe von 1279 Byte komprimiert NetBeans auf 628 Byte und eine GIF-Datei von 599 auf 433 Byte!

Eine Frage: Hast Du eine Ahnung, welche Vor- oder Nachteile eine Komprimierung der JAR-Dateien bringt und kannst Du Dir vorstellen, warum die Grßen trotz Komprimierung auf beiden Rechnern doch noch beachtlich voneinander abweichen?

MfG, kodela

Benutzeravatar
Baldur
Beiträge: 152
Registriert: 21.11.2008, 16:36

Re: selbes Projekt unterschiedliche Größe der jar-Datei

Beitragvon Baldur » 06.07.2014, 19:52

Nebenbei gefragt: Nutzt du ein Versionierungssystem wie z.b. Mercurial, Git, SVN?

Klingt ein bisschen so, als würdest du dein Projekt von Hand immer zwischen beiden Rechnern synchronisieren, wodurch deine Projekt-Einstellungen sich auf beiden Rechnern unterscheiden. Falls dem so ist, würde ich empfehlen dich mit dem Thema einmal auseinanderzusetzen, weil am Ende das synchronisieren zwischen den Rechnern deutlich einfacher ist.

Zum Thema Komprimierung: Da das JAR ja im Endeffekt auch nur ein ZIP ist, hat man da quasi die selben Einstellungsmöglichkeiten und kann die Datei verschieden stark oder auch garnicht komprimieren. Einen Nachteil bei Kompression seh ich da nicht, die Rechenzeit die für Kompression und Dekompression nötig ist, ist heutzutage quasi vernachlässigbar. Bei PNGs ists auch das selbe. PNGs benutzen intern ebenfalls einen ZIP-Algorithmus und können daher unterschiedlich stark komprimiert sein, außerdem gibts noch die Möglichkeit irrelevante Meta-Daten rauszuwerfen, wodurch Platz gespart wird.

Wenn ichs richtig verstanden habe, beruht der Größenunterschied bei dir darauf, daß schonmal die .class-Dateien eine unterschiedliche Größe haben?
Dafür kann es auch wieder viele verschiedene Gründe haben. Eventuell sind unterschiedliche Projekteinstellungen daran schuld. Z.B: gibts da unter "Compiler" einen Haken "Generate Debugging Info". Wenn die deaktiviert sind, kann schonmal ein deutlicher Größenunterschied dabei rauskommen. (Üblicherweise sollte man das aber angeschalten lassen, um ein sinnvolles Stacktrace zu bekommen bei Exceptions)

Benutzeravatar
kodela
Beiträge: 60
Registriert: 21.12.2009, 14:34
Wohnort: Landsberg am Lech
Kontaktdaten:

Re: selbes Projekt unterschiedliche Größe der jar-Datei

Beitragvon kodela » 06.07.2014, 23:32

Hallo Baldur,

danke für Deine Infos und Empfehlungen.

Ja, das klingt nicht nur so, das ist auch so, dass ich mein Hauptprojekt zwischen den zwei Rechnern von Hand synchronisiere. So schlimm (oder dumm), wie sich das anhört, ist das nun bei mir aber nun doch nicht. Ich muss zweimal im Jahr mein Hauptprojekt auf den jeweils anderen Rechner kopieren, einmal im Herbst vom Standrechner auf den mobilen und dann im Frühjahr umgekehrt.

Das mit der Synchronisierung hätte mir vielleicht vor gut zwei Wochen noch gefallen, doch dann geschah etwas, was mich letztendlich dazu brachte, NetBeans 7.1.2 und das Java SDK 1.7. bei mir zu deinstallieren und später dann alles wieder, diesmal mit NetBeans 8.0 und dem Jafa SDK 1.8 neu aufzusetzen. Hier im Thread Ausführung eines Java Projektes extrem langsam habe ich die Gründe und Folgen dafür etwas näher beschrieben.

Auslöser war mein FF-Browser, der sich nicht mehr richtig starten und nur über den Taskmanager beenden ließ, erst auf meinem mobilen Rechner, einen Tag später das selbe auf meinem stationären. Um eine eventuelle Infizierung auszuschließen machte ich mit Avira eine Systemprüfung. Diese Prüfung führte wiederholt bei der Prüfung der NetBeans-Installation zu einem Systemabsturz, weshalb ich NetBeans deinstallierte.

Diese Deinstallation änderte aber nichts am Verhalten des FF. Ich versuchte es wieder mit einer Systemsuchlauf. Jetzt stürzte Avira bei der Prüfung der Java-Dateien ab. Also deinstallierte ich auch Java, ohne dass dies etwas gebracht hätte. Erst als ich auch den Browser mit all seinen Konfigurationsdateien entfernt und FF neu installiert hatte, funktionierte alles wieder.

Warum schreibe ich das alles - einfach deshalb, weil ich den Browser auf den vier Rechnern in meinem Haushalt synchronisiert hatte und mit Sicherheit ein Lesezeichen im Browser Ursache des ganzen Problems war, dieses Lesezeichen aber dank der Synchronisierung nicht auf dem mobilen Rechner blieb, sondern auch auf die andern übertragen wurde. Das Problem machte sich erst bemerkbar, wenn der Browser nach einer Synchronisierung beendet wurde, besser gesagt, beendet werden sollte. Dass er nicht beendet war, stellte man erst fest, wenn man ihn wieder neu starten wollte.

Als ich über den Hauptrechner bei Avira wegen der Störung anfragte, war ich noch ahnungslos und dachte nicht daran, dass ich mir durch die Synchronisierung das Übel von meinem mobilen Rechner geholt hatte.

Lange Rede kurzer Sinn, auf dem Hauptrechner war der Schaden durch meine Erfahrungen mit dem mobilen Rechner nicht all zu groß, auf den beiden anderen konnte ich die Synchronisierung verhindern. Das korrupte Lesezeichen war übrigens noch auf dem Server und wurde übertragen, obwohl es auf dem mobilen Rechner gar nicht mehr vorhanden war. Seit diesen Tagen sehe ich die Synchronisierung mit etwas anderen Augen.

Mit Deinem Hinweis auf die Option "Generate Debugging Info" hast Du den Nagel auf den Kopf getroffen. Ja, das war es, warum immer noch die generierten Dateien für die JAR-Datei unterschiedlichen Größen aufwiesen. Das ist jetzt abgestellt.

Nochmals vielen Dank für Deine Hilfe.

MfG, kodela

Benutzeravatar
Baldur
Beiträge: 152
Registriert: 21.11.2008, 16:36

Re: selbes Projekt unterschiedliche Größe der jar-Datei

Beitragvon Baldur » 07.07.2014, 00:54

Ich hoffe abgestellt ist nur das Problem, die Debug-Einstellungen würde ich lieber an lassen, um bei Exceptions verwertbare Fehlermeldungen zu bekommen ;)

Hm, was den Firefox angeht, da kann ich dir kaum helfen, die Synchronisierung dort hab ich noch nciht benutzt.

Beim Programmieren benutz ich aber sowohl beruflich als auch privat (selbst bei Projekten die ich nur allein auf einem Rechner hab) Mercurial als Versionsverwaltung. Auch wenn man es nicht zum synchronisieren braucht, hat man einen deutlichen Gewinn dadurch, weil man z.B. bei Fehlern jederzeit mit der letzten funktionierenden Version vergleichen kann. Eigentlich gibts keinen wirklichen Grund, sowas nicht zu benutzen ;)

Benutzeravatar
kodela
Beiträge: 60
Registriert: 21.12.2009, 14:34
Wohnort: Landsberg am Lech
Kontaktdaten:

Re: selbes Projekt unterschiedliche Größe der jar-Datei

Beitragvon kodela » 07.07.2014, 08:20

Hallo Baldur,

ja klar, auf beiden Rechnern sind die Debug-Einstellungen aktiviert. Deren Aktivierung war für mich so selbstverständlich, dass ich gar nicht auf den Gedanken gekommen bin, deren Einstellung zu prüfen.

Die Geschichte mit dem Firefox habe ich nur wegen der Synchronisierung und der damit verbundenen Risiken erwähnt, da Du im Zusammenhang mit einer Versionsverwaltung auch von Synchronisierung gesprochen hast. Aber Du hast schon Recht mit Deinen Argumenten für eine Versionsverwaltung. Ich werde mir das überlegen.

MfG, kodela


Zurück zu „NetBeans - Allgemeines“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast