Speicherverbrauch von Java / VM sehr hoch?

Status
Nicht offen für weitere Antworten.

Oli

Top Contributor
Hallo,

ich habe ein kleines Problem. Ich habe eine Mini-Anwendung, die nix anderes macht als ein paar Daten aus einer Datenbank zu holen und diese dann in einer Tabelle darstellt.
Naja ein paar Berechnungen und ein bisschen Sortieren und Filtern ist auch dabei, des wars dann aber auch schon.

Wenn ich diese Applikation starte und noch KEINE Daten geladen habe, braucht das Teil 32 MB im Hauptspeicher. Das kommt mir jetzt ein bisschen viel vor, wenn ich ehrlich bin. Ich habe sämtliche imports, die mit einem * rausgeschmissen und durch die direkten imports ersetzt, leider ohne Erfolg.

Also scheint ja wirklich nur das in den Hauptspeicher geladen zu werden, was tatsächlich gebraucht wird. Aber das können doch keine 32 MB sein, für eine solche Fuzzy-Anwendung, oder??
Hat jemand nen Tipp wie man das minimieren kann, bzw. ist das nomal??

Grüße Oli
 

tfa

Top Contributor
Ja, die VM braucht eben einiges an Speicher. 32MB halte ich aber noch für ziemlich wenig.
 

Wildcard

Top Contributor
Ich habe sämtliche imports, die mit einem * rausgeschmissen und durch die direkten imports ersetzt, leider ohne Erfolg.
Was hast du dir davon erhofft? Es gibt keine imports im Bytecode das ist nur eine Kurzschreibweise. Völlig egal ob du *, oder den Klassennamen verwendest, oder die komplette Klassenbibliothek importierst.
 

Oli

Top Contributor
Hallo Wildcard,

jo hab ich auch gemerkt, ich komme, wie schon öfters erwähnt aus der C# - Ecke und bin noch nicht so tief in die Java-Welt eingetaucht.
Das nächste Problem, das ich habe ist eben auch, dass dieses Programm fast 6MB als JAR und 17MB unkopmprimiert hat. Nun das liegt haupsächlich an dem Datenbanktreiber (4MB). Gibt´s denn ne Möglichkeit, dass nur die benötigten Klassen und die dazugehörigen Referenzen ausgeliefert werden? (Im Moment wird das Jar - File mit FatJar gebastelt. Gibt´s da auch komfortablere Lösungen?

Grüße Oli
 

Wildcard

Top Contributor
Warum sollte der Datenbank Treiber größer als nötig sein? Das Zeug wirst du schon brauchen.
Die Sache mit FatJAR würde ich mir übrigens genau überlegen, dann nicht jede Lizenz erlaubt dir Änderungen (und neu Verpacken ist eine Änderung).
 

Oli

Top Contributor
Hallo Wildcard,

hm. wie soll ich denn sonst ein JAR - File generieren. Selbst wenn ich das über ein Ant - Script mache, ist es ja neu verpacken, oder?
Ok, Datenbanktreiber war wohl flasch ausgedrückt. Datenbank-Package mit vielen Klassen (unter anderem eben der Treiber). Und 90% dieser Klassen brauch ich eben nicht.
Gut ne Lösung wäre halt per Hand aus der Package werfen, aber des ist mir zu aufwendig.

Grüße Oli
 
M

maki

Gast
32 MiB sind viel???
17 MiB sind zuviel???

Sorry, kann ich nicht nachvollziehen.

Gruß,

maki (<- welcher seit 2 Jahren ein Handy mit einer 1GiB microSD Karte hat)
 

Oli

Top Contributor
Hallo,

es soll ja vorkommen, dass es in besstimmten Betrieben noch Rechner gibt, die nur 256 MB RAM haben. Und auch nicht die schnellsten sind. Aber eben schnell genug, dass Leute dort z.B. Buchungen vornehmen können. Die Rechner laufen schon nahe an der Grenze aber sie funktionieren noch einwandfrei.
Ich wollte halt keine Applikation ausliefern, die ein paar Tabellen anzeigt und dafür 17MB RAM verbrauccht.
Egal, ich mach des jetzt mal zum Spaß mit .net und werde dann berichten wieviel RAM des benötigt...

Grüße Oli
 
M

maki

Gast
Egal, ich mach des jetzt mal zum Spaß mit .net und werde dann berichten wieviel RAM des benötigt..
Kannst du doch gar nicht ermitteln, da die meisten Bibliotheken als Teil des OS mitgeliefert sind (Wieviel GiB baraucht Vista ;)) und genauso als Teil des OS RAMs angezeigt werden.

Übrigens wirst du mit Java selten nur bei 32 MB bleiben, 64 sind selbst für kleinere Anwendungen normal, da die JVM eben Speicher vorbelegt. Kannst aber mit JMX den echten RAM verbrauch deiner Java App ermitteln.
 

Wildcard

Top Contributor
hm. wie soll ich denn sonst ein JAR - File generieren. Selbst wenn ich das über ein Ant - Script mache, ist es ja neu verpacken, oder?
Du sollst Fremdbibliotheken eben genau nicht in dein Jar verpacken, sondern in zB einem lib Verzeichnis ausliefern. Dort kannst du dann auch die Lizenzen für die jeweilige Bibliothek ablegen.

Ok, Datenbanktreiber war wohl flasch ausgedrückt. Datenbank-Package mit vielen Klassen (unter anderem eben der Treiber). Und 90% dieser Klassen brauch ich eben nicht.
Gut ne Lösung wäre halt per Hand aus der Package werfen, aber des ist mir zu aufwendig.
Und woher weißt du, das die 10% die du verwendest nicht die anderen 90% benötigen?

@maki
Ach, bin ich froh die korrekte Verwendung der Binärpräfixe zu sehen :D
In letzter Zeit fällt auch bei vielen Applikationen endlich der Groschen, nur bei MS wird's wohl wie üblich wieder ein wenig länger dauern...
 

Oli

Top Contributor
Hi,

auch das ist mir durchaus bewusst. Aber die Bibliotheken liegen eben schon im Speicher. Ob sie gebraucht werden oder nicht.
Ich will hier ja auch keine Diskussion über Windows vom Zaun brechen. Es geht eben darum, dass die App auf ca 40 älteren Rechnern laufen soll. Und deswegen soll sie so sparsam wie möglich mit den vorhandenen Ressourcen umgehen. Das ist auch schon alles. Wenns mit Java eben net machbar ist unter 5MB zu bleiben, muss ich andere Lösungen suchen. Zur Not mach ich des mit C++, da bleib ich mit Sicherheit unter 1MB.

Grüße Oli
 

Wildcard

Top Contributor
Oli hat gesagt.:
auch das ist mir durchaus bewusst. Aber die Bibliotheken liegen eben schon im Speicher. Ob sie gebraucht werden oder nicht.
Sagt wer? Die kommen in den Speicher wenn sie gebraucht werden und nicht vorher. Nur kannst du daran eben keinen Unterschied im Resourcenverbrauch machen.
 

Oli

Top Contributor
Also das halte ich wiederum für ein Gerücht. Meines Wissens verwendet Java Static Binding. Und da wird eben alles in ByteCode umgewandelt und in den Speicher geknallt. DynamicBinding wäre hier besser. Nur ist es halt sehr aufwendig zur Laufzeit die Bibliotheken zu laden, die gebraucht werden...
 

Wildcard

Top Contributor
Java lädt Klassen nach sobald sie angefragt werden (was mit dem Binding nichts zu tun hat). Hier ging es aber nicht um Java, sondern um Windows Bibliotheken, die eben auch nicht auf Verdacht in den Speicher geladen werden, sondern wenn sie gebraucht werden.
Allerdings ist das dann ein anderer Speicherbereich als der des C# Programms, was den Resourcen-Vergleich schwierig macht.
 
M

maki

Gast
Zur Not mach ich des mit C++, da bleib ich mit Sicherheit unter 1MB.
Das halte ich für ein Gerücht ;)

Früher konnte man in VC++ noch die Bibliotheken statisch linken, da hat man dann gesehen wie groß das Ding wirklich ist, anstatt ein paar hundert KiB plötzlich mehrere MB groß, speziell wenn man Dinge wie ActiveX Komponenten nutzt. Mit dynamischer Bindung sieht man das nämlich nicht.

Wenn du C verwenden würdest wäre es zumindest theoretisch machbar, aber wer macht das heute noch wegen ein paar MB...

Naja,, 5MB und Java geht nicht, da hätte ein Blick auf die Anfporderungen schon genügt:
System Requirements

# Windows 98 (1st and 2nd edition) or

# Windows ME or

# Windows NT (service pack 6a) or

# Windows 2000 (service pack 3) or

# Windows XP Home or

# Windows XP Professional (service pack 1)

# Windows 2003 Server Editions


You will also need Pentium 166MHz or faster processor with a minimum of 125MB free disk space and a minimum of 32MB of RAM.
Ansonsten glaube ich auch dass so ein Vergleich ganz schnell als "Windows vs. richtige Betriebssysteme" endet.

@maki
Ach, bin ich froh die korrekte Verwendung der Binärpräfixe zu sehen icon_biggrin.gif
Dem TS scheint es ja um jedes KiB zu gehen ;)
 

Oli

Top Contributor
@SchonWiederFred:
nein die sind Lizenzpflichtig

@maki:
Die App ist nun in c++ geschrieben und braucht tatsächlich 7MB inklusive dem Laden der Daten. Habs auch schon auf dem Zielsystem getestet, das geht jetzt nicht meh in die Knie.
Mir ist durchaus bewusst, dass das ein Ausnahmefall ist. Aber mit der momentanen Lösung kann ich und mein Auftraggeber leben.

Und Windows vs. andere Betriebsysteme ist ein Vergleich der hinkt. Denn ich programmiere ja net für mich sondern für Kunden. Und die haben eben Windws-Rechner (vermutlich 95% aller Firmen in D - aber wie gesagt VERMUTLICH). Das kann ich leider nicht ändern und ich muss damit leben.

Grüße Oli
 
M

maki

Gast
Klar ist Windows in der Überzahl, aber ich habe persönlich seit 4-5 Jahren keine Maschine mit nur 256MiB RAM gesehen, kommt eben immer auf den Fall an.
 

Oli

Top Contributor
Eben. Ich hab auch erstmal geschluckt. Aber was will ich machen. Es stehen eben noch ein paar solcher Kisten hier rum und deswegen muss ich mich daran orientieren. Leider...

Grüße Oli
 

byte

Top Contributor
Die Speicherdifferenz wird wohl schlicht und ergreifend durch die JVM kommen.

Wie ist das eigentlich bei .NET Anwendungen? Ist es wie bei Java, dass dort die VM quasi im Anwendungsprozess integriert ist? Oder läuft die VM dann separat als Systemprozess? Dann könnte man ja nicht den tatsächlichen Speicherverbrauch ableiten.
 

robertpic71

Bekanntes Mitglied
Da ich vom anderen Thread ableite, dass es sich um den DB2/400 Treiber handelt hier noch mein Kommentar.

Wenn du die Programmgrößen vergleichst, ist dann im C(++) auch der ODBC-Treiber eingerechnet? Speziell den DB2/400 Treiber gibt es nicht extra - da muss man zumindest ein Konfigurationsprogramme vom Client Access mitinstallieren. Ich habe hier im Moment keine Minimalinstallation, aber die braucht sicher mehr als 4 MB.

Im Vergleich zu einer Windows ODBC Anwendung brauche ich beim Javaprogramm keine zusätzliche Installtion vom ODBC-Treiber. Ein nicht zu unterschätzender Vorteil. Vor allem den ODBC-Treiber von Cient Access wird man nicht so leicht mit einer eigenen Windowsanwendung mitverpacken können.

Was den Hauptspeicherbedarf angeht, könnte man noch versuchen diesen mit Startoptionen (z.B. -Xmx 16mb) zu minimieren. Da gibt es ein paar Schalter zur Speichersteuerung - aber außer den -Xmx habe ich da noch nie einen benötigt.

Zum JDBC von der DB2: Ja dieser Treiber hat vom ConnectionPool, vielen Codetabelle (EBCDIC, ASCII, ANSI, Unicode für viele Sprachen), FTP, Dateisystem, Druckerzugriff, Jobsteuerung usw. alles dabei. Den Treiber gibt es auch in einer OpenSource-Version (JTOPEN). Dort könnte man die build.xml bearbeiten. Da die Bereiche aber recht überschneident sind, gibt es nur wenige Packages und das Trennen ist mühsam (und für mich sowieso keine Thema).

Zu Dot.Net habe ich keine großen Erfahrungswerte, aber die wenigen Programme, hier in der Firma, sind auch weit weg vom Speicherverbrauch nativer Programme.

/Robert
 

Verjigorm

Top Contributor
Ein Kumpel von mir hat mal auftragsweise für eine große deutsche Bank gearbeitet und dort vorort was installiert etc.

Dort läuft ein Rechner seit wohl 37!!! Jahren, der irgendwelche Sparbuchzinsen oder sonstwas berechnet. kA.
Es gibt noch 2 Mitarbeiter in der Firma, die halbwegs wissen, welche Knöpfe sie drücken müssen.
So wie es hiess, wird das Ding erst ersetzt, wenns wirklich abfackelt, vorher traut sich da keiner ran, diese "Kiste" zu ersetzen.
Wobei die Ablösemaschine wohl schon seit Jahren nebendran rumgammelt, sich aber keiner traut das DIng zu ersetzen, weil es wohl nicht ganz klar ist, was in der Downtime so alles passiert bzw. passieren wird.

(Alles nur HörenSagen, find ich aber witzig ;) )
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Datentypen interner Speicherverbrauch x64 long vs. int Allgemeine Java-Themen 8
B Speicherverbrauch Objekt-Referenz Allgemeine Java-Themen 11
B speicherverbrauch 2dimensionales array - rätsel?! Allgemeine Java-Themen 13
M Analysieren von Speicherverbrauch Allgemeine Java-Themen 5
lacco Speicherverbrauch von Arrays Allgemeine Java-Themen 2
G Speicherverbrauch einer Variable Allgemeine Java-Themen 2
G Speicherverbrauch eines Programms Allgemeine Java-Themen 2
L Speicherverbrauch einer Anwendung unter Windows Allgemeine Java-Themen 2
J Speicherverbrauch des Systems ermitteln Allgemeine Java-Themen 4
J Maximalen Speicherverbrauch ermöglichen Allgemeine Java-Themen 2
C Speicherverbrauch von JDialog enorm Allgemeine Java-Themen 6
OnDemand Java Deployment Vaadin Allgemeine Java-Themen 3
D Hat Java eine Library um JavaScript auszuwerten? Allgemeine Java-Themen 2
Zrebna Wieso sind eigentlich JUnit-Tests in src/test/java platziert - nur Konvention? Allgemeine Java-Themen 7
N LlaMA, KI, java-llama.cpp Allgemeine Java-Themen 39
V Java-Codierungsherausforderung: Navigieren durch die Macken der Datumsmanipulation Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
M java: unexpected type Allgemeine Java-Themen 2
harrytut Java Input/Output Tests Junit Allgemeine Java-Themen 3
B Java Discord bot auf ein Root Server? Allgemeine Java-Themen 1
BetziTheRealOne Java PKIX path building failed as non Admin Allgemeine Java-Themen 15
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
KonradN Java 21 Release Allgemeine Java-Themen 5
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
K Java Anwendung machen Anleitung Allgemeine Java-Themen 5
G java.io.listFiles() Allgemeine Java-Themen 3
8u3631984 Frage zu Java Streams min / max Allgemeine Java-Themen 17
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
K Java-Projekt Allgemeine Java-Themen 11
K Java-Projekt Allgemeine Java-Themen 0
ruutaiokwu Welcher Browser unterstützt heutzutage noch Java Applets? Allgemeine Java-Themen 5
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3
rode45e Java Threads Allgemeine Java-Themen 4
G java.io.listFiles() Allgemeine Java-Themen 2
N Java Dynamic Proxy Allgemeine Java-Themen 3
N Leichte Java Gegner Ki Allgemeine Java-Themen 10
A Java modul Problem Allgemeine Java-Themen 4
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
V Funktionale Schnittstelle in Java Allgemeine Java-Themen 3
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
berserkerdq2 Wenn ich bei Intelij javafx mit maven importieren will, muss ich das in die pom.xml reintun, aber warum noch in module-info.java? Allgemeine Java-Themen 3
KonradN Java 20 am 21. März Allgemeine Java-Themen 1
O Java Website Stock Bot Allgemeine Java-Themen 3
J Front-/Backend in Java Allgemeine Java-Themen 14
doopexxx JAVA Google Webcrawler Allgemeine Java-Themen 1
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
G java.lang.NoClassDefFoundError: org/aspectj/lang/Signature Allgemeine Java-Themen 2
lalex1491 Java Aktienkurse nachfragen Allgemeine Java-Themen 4
J Class to link Java Allgemeine Java-Themen 4
V Wie funktioniert das Schlüsselwort "final" von Java? Allgemeine Java-Themen 19
mrStudent Inferenz JAVA Allgemeine Java-Themen 6
U URI Rechner (Java Script) Allgemeine Java-Themen 7
TheSkyRider Java Geburtsdatum Textfeld Allgemeine Java-Themen 7
mihe7 Java 19 JavaDocs: Browserintegration Allgemeine Java-Themen 0
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
H Java Rechner Programmierung der Mathematik Allgemeine Java-Themen 33
Lennox Schinkel Java Kara Auf einen Java Host laufen lassen Allgemeine Java-Themen 17
C Fußnoten von DocX mit Java Allgemeine Java-Themen 2
C Fußnoten in DocX mit Java Allgemeine Java-Themen 1
M Aussagenlogik in Java Programmieren Allgemeine Java-Themen 22
B Per Java Word Dokument schreiben? Allgemeine Java-Themen 8
krgewb Java-Bibliothek für ONVIF Allgemeine Java-Themen 1
KonradN Oracle übergibt (Java Teile der) GraalVM Community Edition an OpenJDK Community Allgemeine Java-Themen 2
Momo16 Brauche Hilfe - Java Projekt kann nicht erstellt werden Allgemeine Java-Themen 12
B Java mit command line und jars benutzen? Allgemeine Java-Themen 18
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
Mick P. F. Wie kriege ich die Fehlermeldung "java: symbol lookup error: ..." weg? Allgemeine Java-Themen 11
K Nachhilfe Java Allgemeine Java-Themen 11
KonradN Java 19 Allgemeine Java-Themen 11
F IDEA IntelliJ Java Songliste erstellen Allgemeine Java-Themen 6
TheSepp Java bestimmtes Array auf den Wert 0 setzen Allgemeine Java-Themen 32
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
Sachinbhatt Sind alle Methoden in Java implizit virtuell Allgemeine Java-Themen 2
E Java und integrierte Grafikkarten Allgemeine Java-Themen 18
Sachinbhatt Wie wird die Typumwandlung bei Mehrfachvererbung in Java implementiert? Allgemeine Java-Themen 3
Peterw73 Hilfe bei Java gesucht Allgemeine Java-Themen 3
A Java unter Win 10 Allgemeine Java-Themen 1
B Woher kommen die Bildschirmkoordinaten beim java Robot? Allgemeine Java-Themen 14
P9cman java.Lang Klassen fehlen in JRE System Library Allgemeine Java-Themen 1
T Java Robot Class - Bot Allgemeine Java-Themen 3
E Wie Java Heap Space vergrößern? Allgemeine Java-Themen 3
B Java Programm auf virutellem Desktop laufen lassen? Allgemeine Java-Themen 1
D VBA Code mit Java ausführen möglich? Allgemeine Java-Themen 10
berserkerdq2 Threads, wie genau läuft das in Java ab? (Ich kann Threads erstellen und nutzen, nur das Verständnis) Allgemeine Java-Themen 6
izoards Java Home Pfad unabhängig von der Version Allgemeine Java-Themen 7
N JAVA-Code mit Grafikfenster zeichnet in Windows, aber nicht Mac. Allgemeine Java-Themen 4
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
KonradN CVE-2022-21449: Fehler in Java bei Signaturprüfung Allgemeine Java-Themen 20
berserkerdq2 Java sql Allgemeine Java-Themen 15
JordenJost Unverständlicher Java code? Allgemeine Java-Themen 21
LimDul XSD To Java - Überschreiben von Assoziationen Allgemeine Java-Themen 1
Aartiyadav Comparisons and Swapa in Bubble-sort Java Allgemeine Java-Themen 6
KonradN Java 18 Allgemeine Java-Themen 8
N Statistische Auswertung von Logfiles (Einlesen, auswerten und grafische Aufbereitung von logfiles) mit Java Allgemeine Java-Themen 9
ME2002 Fragen aus einer Java Klausur Allgemeine Java-Themen 67
Z Mit Java 8+ Streams Zeilen nummern zu Zeilen hinzufügen Allgemeine Java-Themen 17

Ähnliche Java Themen

Neue Themen


Oben