Konfiguration eines Java- Programms

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Morgen,

ich habe ein Java- Programm, das nach dem laden einer Konfigurations- XML- Datei startet, ich bin über diesen Umstand aber nicht ganz glücklich, das das laden der Konfig- XML- Datei bei starten schon einige Zeit dauert und wenn die Konfig- Datei einigermaßen groß ist, mir den Speicher anfüllt,

Momentan ist es so, dass sich die Konfig- XML- Datei nach dem Laden in einem Vector befindet und ich dann immer wieder mal über den Vector iterieren muss um an informationen zu gelangen,

Meine Frage wäre jetzt, ob jemand eine bessere, andere Lösung weiß, die Konfig- XML- Datei nicht zu laden und immer wieder aus der Datei zu lesen wird wahrscheinlich noch mehr zeit kosten,

Vielleicht hat ja dazu jemand eine Idee,
 

didjitalist

Bekanntes Mitglied
Was befindet sich denn im Vector? XML ist extrem geschwätzig, deshalb ist es eine gute Idee, die ganzen "überflüssigen" Auszeichnungen zu verwerfen. Etwas wie '<element value="42">' im Speicher zu halten ist natürlich extrem speicherintensiver, als sich irgendwo einen simplen integer zu merken.
 

MQue

Top Contributor
ein Element in meiner XML- Datei schaut so aus:

Code:
<Pref>
  <Element id = "" name = "">
     <varID id = "" name = "">
        <State  id = "" name = "">
           <properties>
           </properties>
        </State>
         ...                //bis zu 20 <State>
     </varID>
  </Element>

// bis zu 500 <Element>
</Pref>


ich weiß auch nicht ob das die schnellste möglichkeit ist, das ganze einzulesen, ist es vielleicht besser, direkt aus der Datei zu lesen, ich bin halt auf der suche nach eine Möglichkeit, die "ziemlich schnell und "ziemlich" speicherschonend ist,
was ist da eurer meinung nach das beste?
 

Joker

Bekanntes Mitglied
muss es unbedingt XML sein? Was binäres (Objektserialisierung)ist, was Speicherbedarf und Geschwindigkeit angeht, sehr viel besser.
 
S

SlaterB

Gast
das Einlesen ist recht egal, sollte pro MB nur wenige ms dauern, sonst läuft was falsch und man kann wirklich drüber nachdenken,
die Hauptsache ist, dass es nur einmal passiert

danach wird das ganze in einer für das Programm sinnvollen Weise abgelegt,
ohne die Art der Informationen und des Zugriffs zu kennen, kann man dazu wenig sagen,
immer nützlich ist eine Map, Key -> Value, ohne eine Liste komplett durchlaufen zu müssen,

wenn du weniger als 100.000 Einzelinformationen hast, sollte das ganze jedenfalls mit normalen Verfahren keine nennenswerte Zeit dauern und keinen nennenswerten Speicher belegen,
 
G

Guest

Gast
meine bedenken sind, dass nach dem einlesen das Programm recht aufgeblasen ist und ich den Java Heap Space erhöhen muss und ich möchte mit so wenig speicher als irgend möglich auskommen aber das programm soll auch schnell sein, den kompromis möchte ich irgendwie finden,

PS: ich hab mir gerade das Zeitverhalten eines Arrays und einer ArrayList angesehen und da kam heraus dass bei unter 400000 Einträge kein unterschied ist, bis 3000000 ist das Array schneller, und ab 7000000 Einträgen ist die ArrayList wieder schneller, kan das sein bzw. wie ist das zu erklären?
 

duke

Mitglied
Wie sieht es mit einer HashMap aus...

Hier kannst Du über Schlüssel direkt auf Informationen zugreifen und sie kann (auch mit anderen Collections) geschachtelt aufgebaut werden.
Ausserdem sind HashMaps sehr schnell.

Du kannst die HashMap so lange, wie sie benötigt, wird in den Cache legen.
 
G

Guest

Gast
die XML- Datei hat um die 40000 Zeilen und ich lese diese über den DOM- Reader ein, und diese wird dann in einem Vector gesopeichert
 
G

Gelöschtes Mitglied 5909

Gast
ne config mit 40000 Zeilen :O - was schreibst du bitte?
ich glaub da würd ich ne embedded h2 db für die config nehmen ^^
 

duke

Mitglied
Um was für eine Art Programm handelt es sich denn und was genau muss denn konfiguriert werden ?

Evtl. lässt sich die Thematik dann besser betrachten.
 
G

Guest

Gast
es handelt sich um die Kofiguration einer Visualisierung,

in der XML- Datei steht drinnen, wie die Button, Slider, Textfelder aussehen, wo sich die Datenbank befindet,, wie die TCP oder serielle Verbindung ausschaut und so weiter,
Das heißt jetzt nicht das die XML- Datei immer 40000 Zeilen hat, aber diese kann bis zu 40000 Zeilen haben bei großen Systemen,
 

Atze

Top Contributor
wenn du die 40000-zeilen xml-datei mit nem dom parser einliest, hast du sie ja komplett im speicher und kannst immer wieder drauf zugreigen, was schon sehr praktisch ist, aber auch speicher kostet.

vielleicht solltest du wirklich mit nem sax-parser durch das ding laufen, und die alle infos mit passenden keys in eine map legen. die kannst du dann im speicher vorhalten und immer drauf zugreifen, sollte um einiges weniger speicher verbrauchen als das gesamte dom.
 
G

Guest

Gast
Atze hat gesagt.:
im speicher vorhalten


Was meinst du mit "im Speicher vorhalten"? das man eine Map hat, deren Inhalte auf die XML- Datei verweisen oder das schon alles in den Speicher eingelesen wird,
warum ist das dann speicherschonender wenn ich alles einlese und in einer Map speichere, das wird ja dann genausoviel speicher bzw. sogar mehr Speicher brauchen, da ich ja die keys auch noch habe oder wie meinst du das
 
S

SlaterB

Gast
du sollst nur die Informationen speichern, die benötigt werden


<Element id = "TT1" wert = "4534897">
sind vielleicht 30 Zeichen mit 60 Byte mit wer weiß wieviel XML noch drumherum

String "TT1" + Integer 4534897
sind dagegen nur 6+4 = 10 Byte, vom Aufwand des wiederholten Parsens ganz zu schweigen

so in der Art
 

Atze

Top Contributor
ja, wie slater schon sagte, nur die infos, die du brauchst. du brauchst ja nicht immer die ganze xml struktur, du kannst ja auf die tags etc oder so verzichten, sondern zB nur key="datenbank" / value="jdbc:mysql://localhost/" etc.
das ist auf jeden fall speicherschonender als das gesamte dom mit den unnätigen informationen.

und mit "im speicher vorhalten" meine ich, dass du die map in deinem programm halt global/statisch zur verfügung stellst, die bleibt ja dann so lange wie du sie brauchst
 

Tobias

Top Contributor
Der Apache Digester ist eine Abstraktionsschicht, die auf einem beliebigen SAX-Parser aufsetzt. Man kann den Digester mittels Rules konfigurieren, indem man einen XPath-Ausdruck angibt, der die entsprechende Regeln auslösen soll (also zum Beispiel "/mask/head/title" - wenn ein Title-Tag gefunden wird, welches Head und Mask als Eltern hat), sowie eine Regeldefinition, also ein Objekt, das beschreibt, was genau getan werden soll.

Auf diese Weise ist es sehr leicht (und speicherschonend) möglich Information aus einem XML-Dokument in eine eigene pure-Java-Datenstruktur zu übertragen. Als Einstieg sei das "Jakarta Commons Cookbook" empfohlen. Die Doc auf der Digester-Projektseite tut's natürlich auch.

mpG
Tobias
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Konfiguration verwalten Allgemeine Java-Themen 5
G Interface Laden der Konfiguration über Interfaces sinnvoll? Allgemeine Java-Themen 28
L Java Web Start: IE Konfiguration? Allgemeine Java-Themen 5
D PC Konfiguration auslesen Allgemeine Java-Themen 13
G iBatis Konfiguration Allgemeine Java-Themen 5
T NetBeans: Ist meine Konfiguration falsch? Allgemeine Java-Themen 7
0 Konfiguration lesen / schreiben - Bibliothek dafür? Allgemeine Java-Themen 3
A log4j 1.3 und ändern der log Konfiguration zur Laufzeit Allgemeine Java-Themen 4
Y log4J XML Konfiguration Allgemeine Java-Themen 8
M Eclipse Konfiguration Allgemeine Java-Themen 5
T Jetty Konfiguration - Probleme mit Java Klassen Allgemeine Java-Themen 2
O regulärer Ausdruck zum durchsuchen eines Strings verwenden Allgemeine Java-Themen 2
T Rotationswinkel eines Bildes bestimmen Allgemeine Java-Themen 4
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
Encera Größe eines Objektes in Byte berechnen Allgemeine Java-Themen 2
8u3631984 Prüfen ob min. ein Element eines Sets in einem anderen Set enh Allgemeine Java-Themen 4
M Array Rang eines Elements Allgemeine Java-Themen 4
OnDemand Teile eines Links entfernen Allgemeine Java-Themen 6
H Auslesen eines (LDAP-)Attributs in Active Directory Allgemeine Java-Themen 2
W JSON parsen eines ,mit JS.stringify erstellten Strings Allgemeine Java-Themen 27
H Textposition eines gedrehten Textes verschieben Allgemeine Java-Themen 8
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
E Ersetzen eines Bildes in der Kopfzeile eines Word-Docx-Dokuments mit Apache POI XWPF Allgemeine Java-Themen 0
N Fahrtrichtung eines selbstfahrenden Auto ändern Allgemeine Java-Themen 3
T Letztes Zeichen eines Strings enfernen Allgemeine Java-Themen 14
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
gotzi242 Schatzsuche mithilfe eines O(log n) Algorithmus Allgemeine Java-Themen 2
C Koordinaten LONG/LAT eines neuen Punktes in bestimmter Entfernen und Winkel berechnen Allgemeine Java-Themen 3
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
LimDul Direktes return eines Array geht nicht Allgemeine Java-Themen 20
S Mittelwert anhand eines Stream berechnen Allgemeine Java-Themen 5
kodela Breite eines erweiterten Monitors feststellen Allgemeine Java-Themen 5
R Zeilen eines 2d Arrays abwechselnd links und rechts mit Nullen auffüllen Allgemeine Java-Themen 14
Zrebna Alternative Darstellung eines Codesnippets Allgemeine Java-Themen 33
kodela Inhalt eines Arrays ändert sich mysteriös Allgemeine Java-Themen 2
bueseb84 Wget mit Wildcards - oder wie lädt man bei JFrog die letzte Version eines Artifacts herunter Allgemeine Java-Themen 3
N Erkennen eines Programs Allgemeine Java-Themen 2
N Pausieren eines Programmes Allgemeine Java-Themen 4
D Input/Output Implementierung eines CommandHandlers/Parsers für viele Eingaben Allgemeine Java-Themen 26
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
F Wie bekommt man alle Filenamen eines Webserver Verzeichnisses Allgemeine Java-Themen 6
A Fehler beim Öffnen eines Projekts Allgemeine Java-Themen 6
N Eigenschaften eines Buttons per Setter verändern Allgemeine Java-Themen 5
S Ausfuehrung eines Programms aufzeichnen..? Allgemeine Java-Themen 4
X Ermittlung eines doppelte Paars mit Streams Allgemeine Java-Themen 50
Stonie Prüfen von direkter Implementierung eines Interfaces Allgemeine Java-Themen 7
S Vorbereitung eines Praktikums Allgemeine Java-Themen 4
H Aufruf eines Web Service anhand übergebenen Parameter Allgemeine Java-Themen 2
M Weiterleiten von empfangenen Nachrichten eines StompSessionHandlers Allgemeine Java-Themen 1
J Programm zum Suchen eines Wortes im Dateisystem Allgemeine Java-Themen 4
H Rename eines Projekts Allgemeine Java-Themen 1
J Fenstergröße eines anderen Programmes auslesen Allgemeine Java-Themen 9
ReinerCoder auf Klassen innerhalb eines package zugreifen Allgemeine Java-Themen 22
Meeresgott Erste Schritte Sourcetree - Git | Suchen eines Commits Allgemeine Java-Themen 2
E Status eines USB Mikrofon abfragen Allgemeine Java-Themen 2
DaCrazyJavaExpert OOP Ansätze und Tipps zum Porgrammieren eines Taschenrechners Allgemeine Java-Themen 25
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
I Verbindung eines Java-Plugins mit Webserver Allgemeine Java-Themen 3
L Auswertung eines Testes funktioniert nicht Allgemeine Java-Themen 37
G Iteratoren - Wie kann man mithilfe von Iteratoren nur jeden zweiten Wert eines TreeSets ausgeben? Allgemeine Java-Themen 4
GreenTeaYT Elemente eines 2Dim LinkedList von links nach rechts ausgeben? Allgemeine Java-Themen 0
B Spalten eines 2d-Arrays Allgemeine Java-Themen 2
M Rechenprogramm eines wissenschaftlichen Taschenrechners Allgemeine Java-Themen 4
S Eigenschaften (hier Verknüpfung) eines Files lesen Allgemeine Java-Themen 2
E Typüberprüfung eines chars Allgemeine Java-Themen 5
H Hilfe bei Erstellung eines Hilfe Fenster bei Tastendruck (F1 bei Win98) Allgemeine Java-Themen 5
T Teile eines Double-Wertes verändern Allgemeine Java-Themen 2
R Rückgabe eines Arrays durch Funktion Allgemeine Java-Themen 9
H Datentypen Typ eines Arrays überprüfen Allgemeine Java-Themen 9
RalleYTN DPI eines Bildes ändern Allgemeine Java-Themen 4
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
K Bestimmten Bereich eines Strings lesen Allgemeine Java-Themen 6
C -Verschiedene Versionen eines Programms verwalten Allgemeine Java-Themen 7
O Datentypen Erstellung eines Containers, der verschachtelte Map-Strukturen beherbergen kann Allgemeine Java-Themen 0
A einmalige Ausführung eines Methodenabschnittes Allgemeine Java-Themen 3
F CPU Last eines Thread ausfindig machen Allgemeine Java-Themen 0
L Menge der Buchstaben eines Textes zählen Allgemeine Java-Themen 3
F Teil eines Bildes laden Allgemeine Java-Themen 1
Neumi5694 Operatoren regEx für das Erstellen eines Strings verwenden Allgemeine Java-Themen 3
P Löschen eines keys in einer SortedMap Allgemeine Java-Themen 5
RalleYTN Input/Output URL eines Zip Entry? Allgemeine Java-Themen 2
S Alle Methodenaufrufe eines Threads notieren..? Allgemeine Java-Themen 7
J NullPointerExeption bei Inizialisierung eines Arrays Allgemeine Java-Themen 3
I Setzen und Lesen eines Objektes (Enum?) Allgemeine Java-Themen 10
L Implementierung eines AVT-Baums Allgemeine Java-Themen 2
D Größe der Zahlenkombinationen eines Arrays begrenzen Allgemeine Java-Themen 3
D Objekt entlang eines Funktionsgraphens bewegen Allgemeine Java-Themen 6
B Existenz eines Files max 30 sec prüfen Allgemeine Java-Themen 5
U Koordinaten alle Pixel eines Dreiecks zeichnen ausgeben Allgemeine Java-Themen 5
P Wie funktioniert das Feedback eines Klicks auf eine Java GUI Allgemeine Java-Themen 10
thet1983 nach teilen eines Dateinamens suchen Allgemeine Java-Themen 6
T Bezeichnung eines Objektes mit String/int kombinieren Allgemeine Java-Themen 3
Z Auswerten eines eingegeben Termes Allgemeine Java-Themen 13
X Registrierung eines Ecore-Models außerhalb der Eclipse-Umgebung Allgemeine Java-Themen 0
R Instanzen eines Programms Allgemeine Java-Themen 8
I Arbeitsmaterialien eines Softwareentwicklers? Allgemeine Java-Themen 7
L Größe eines Objekts im Arbeitsspeicher Allgemeine Java-Themen 1
D Name eines Nicht-String Objekts ausgeben Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben