viele Datensätze aus Datenbank - Java Heap Space - Excepion

Status
Nicht offen für weitere Antworten.

Oli

Top Contributor
Hallo,

ich lese aus einer Datenbank eine bestimte Anzahl > 10.000 Zeilen ein (10 Spalten).
Das ganze liegt in einer ArrayList, jede Zeile ein StringArray.
Die Daten werden auch geladen, kein Problem aber wenn ich weiter mit den Daten arbeiten will (z.B. auf Labels packen), dann bekomme ich eine:

java.lang.NullPointerException
Exception in thread "Thread-3" java.lang.OutOfMemoryError: Java heap space
at java.lang.Object.clone(Native Method)
at java.awt.GridBagConstraints.clone(Unknown Source)
at java.awt.GridBagLayout.setConstraints(Unknown Source)
at java.awt.GridBagLayout.addLayoutComponent(Unknown Source)
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at view.KundenNummer$1.run(KundenNummer.java:134)
at java.lang.Thread.run(Unknown Source)
Connection closed
Exception in thread "AWT-Windows"


Nun meine Frage:

Würde sich das Problem lösen lassen wenn ich für jede größere Aktion (also Laden, graphisch aufbereiten usw.) mit einem extra Thread arbeite?
Oder kann man den HeapSpace erweitern?


Grüße Oli
 

The_S

Top Contributor
Den Heapspace kannst du mit dem Konsolenparameter -Xms bzw. -Xmx erweitern. Allerdings ist deine Fehlermeldung sehr merkwürdig - eine NullPointerException gekoppelt mit einem OutOfMemoryError!?
 
T

tuxedo

Gast
Heapspace erhöhen ist eine Methode. Daten blockweise aus der DB lesen und verarbeiten so dass nicht _alles_ im Speicher rumliegen muss eine andere ...

Weil, selbst wenn du den Heapspace jetzt erhöhst: Was passiert wenn es auf einmal 20.000 Zeilen werden?! Dann kommst du vermutlich wieder in Schwierigkeiten.
 

Oli

Top Contributor
Hi,

ja das stimmt wohl. Nun wie kann ich denn die Daten blockweise aus der Datenbank lesen? Ich hab eine stored proc mit einem dreifach join und die liefert mir eben einen cursor zurück, den ich dann im meine ArrayList speichere.
 
T

tuxedo

Gast
Kann ich dir sop spontan auch nicht sagen. Bei MySQL gibts jedenfalls sowas:

Code:
SELECT *
FROM `mantis_custom_field_project_table`
LIMIT 0 , 30

Damit kriegst du nur die ersten 30 Zeilen des SELECT Results.

Code:
SELECT *
FROM `mantis_custom_field_project_table`
LIMIT 30, 60

Und damit dir zweiten 30 ...

- Alex
 

Oli

Top Contributor
Es handelt sich dabei um Kundendaten, mit Kundennummer, Anschrift usw.
Diese sollen alle angezeigt werden. Ich habe eine Klasse Kunde, dort wird für jede Kundennummer ein Exemplar erzeugt und auf die ArrayList gepackt.
Ich brauche das um später Berechnungen, weitere selects oder vergleiche laufen lassen zu können.
Die Daten müssen also immer global verfügbar bleiben.
 

The_S

Top Contributor
@tuxedo

wenn Olli aber keinen Einfluss auf die stored procedures hat, dann nützt ihm das wenig ...
 

Oli

Top Contributor
Oder hat Java ernsthaft ein Problem, wenn ich 10000 Panels mit jeweis 5 Labels generiere?
Schaut nämlich fast so aus. Die Zeile in der die exception geworfen wird:

JLabel plz = new JLabel();
 

The_S

Top Contributor
Java hat keine Probleme damit. Aber der zur Verfügung stehende Speicher ...

für was musst du denn so viele Labels und Panels und Daten im Arbeitsspeicher halten?
 

FArt

Top Contributor
Oli hat gesagt.:
Oder hat Java ernsthaft ein Problem, wenn ich 10000 Panels mit jeweis 5 Labels generiere?
Schaut nämlich fast so aus. Die Zeile in der die exception geworfen wird:

JLabel plz = new JLabel();

lol

Java hat keinerlei Probleme, so lange du der VM genügend Speicher zuweist. Wenn du davon nicht unbegrenzt zur Verfügung hast, solltest du dir überlegen, ob das was du machst auch sinnvoll ist.

Tipp: es gibt keinen sinnvollen Anwendungsfall für 10000 Panels.
 
T

tuxedo

Gast
>> wenn Olli aber keinen Einfluss auf die stored procedures hat, dann nützt ihm das wenig ...

Wollte damit nur ausdrücken, dass es sicher eine Möglichkeit gibt das Resultset einzuschränken...

>> für was musst du denn so viele Labels und Panels und Daten im Arbeitsspeicher halten?

Und genau das war die Intention zu sagen/schreiben: Blockweise lesen

Gruß
Alex
 

Oli

Top Contributor
Hallo FArt,

Eine ScrollPane auf der 10000 Panels liegen und auf diesen Panels liegen dann eben Labels mit Kundennummer usw ist nicht sinnvoll?
Nun wenn der Auftrageber meint es ist sinnvoll und er sich gerne durch 10000 Datensätze manövriert (nun ne Schnellsuche will er natülich auch) dann ist das eben so.

Ich habs jetzt in eine Tabelle gepackt, gut gefällt mir zwar net so gut, aber es funktioniert erstmal...
 

The_S

Top Contributor
Du kannst auch deine bisherige Datenansicht beibehalten. Du zeigst ja eh nicht alle Datensätze gleichzeitig an. Musst dann halt nur beim Scrollen entsprechend reagieren ...
 

Oli

Top Contributor
Noch ne Frage:

Insgesamt sind es 800.000 Kunden. Die storedProc liefert abhängig von Benutzer eine Anzahl von Datensätzen. Wenn sich ein Abteilungsleiter einklinkt, dann bekommt er alle Kundendaten seiner Mitarbeiter (10000*12)...

Da hauts mir doch dann die JTable um die Ohren oder? Maximale Zeilenanzahl = 65536 oder?

Grüße Oli
 

Oli

Top Contributor
Hallo Hobbit, das ist eine gute Idee. Perfekt, danke (Hätte ich ja auch selbst draufkommen können)...

Grüße Oli
 

The_S

Top Contributor
Wie kommst du da drauf?

Code:
package de.test;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class Test {
	
  public static void main(String args[]) throws Exception {
    
	JFrame frame = new JFrame();
	JTable table = new JTable(100000, 10);
	for (int i = 0; i < 100000; i++) {
		table.setValueAt(i, i, 0);
	}
	frame.add(new JScrollPane(table));
	frame.setVisible(true);
  }
}
 
T

tuxedo

Gast
Jupp, solltest die Panels mit dem ganzen Krempel dann "on-the-fly" laden und "alte" Panels die dann nicht mehr sichtbar sind entfernen.
 

Oli

Top Contributor
Dachte ich hätte dass irgendwo mal gelesen. Dann hab ich mich getäuscht.
Nun ich werde das nun eh so machen, wie du vorgeschlagen hast. Die Datenbasis habe ich ja und ich muss ja nur eine bestimmte Menge anzeigen.
Die Lösung mit der erweiterung der Speichers der VM ist ja auch net des wahre. Wer will den ein Prog im Speicher liegen haben, dass mal eben 250 MB groß ist...
 

Oli

Top Contributor
Hi tuxedo,

ich dachte mir eigentlich, dass ich eine vorgegeben Anzahl von Panels mit Ihren Labels anzeige und dann eben wenn "gescrollt" wird nur die Labels mit neuen Daten füttere...

Oder ist es besser, jedesmal die Panels und Labels neu zu erstellen? Ist doch eigentlich unnötig und braucht unnötig Rechenleistung, oder?
 

FArt

Top Contributor
Oli hat gesagt.:
Hi tuxedo,

ich dachte mir eigentlich, dass ich eine vorgegeben Anzahl von Panels mit Ihren Labels anzeige und dann eben wenn "gescrollt" wird nur die Labels mit neuen Daten füttere...

Oder ist es besser, jedesmal die Panels und Labels neu zu erstellen? Ist doch eigentlich unnötig und braucht unnötig Rechenleistung, oder?

Du brauchst nur sichtbare Panels. Genau das war gemeint mit "wie sinnvoll sind 10000 Panels", denn sehen kann die niemand... auch deine Kunden nicht.

[EDIT]
Wäre nicht eine JTable das richtige für dich?
 

Oli

Top Contributor
Hallo FArt, nun leider kann ich keine Gedanken lesen ;-)

das mit der JTable habe ich bereits weiter oben beschrieben. Gefällt mir aber nicht so gut. Software hat Anforderungen: Funktionale und nicht-funktionale. Zu den nicht-funktionalen gehört eben: "Es muss gut ausschauen!" - Nun und darauf wird manchmal mehr Wert drauf als auf die Wichtigen... (Leider)
Deswegen: Keine Table, sondern schöne farbige Panels mit runden Ecken usw...

Grüße Oli
 

FArt

Top Contributor
Oli hat gesagt.:
Hallo FArt, nun leider kann ich keine Gedanken lesen ;-)

das mit der JTable habe ich bereits weiter oben beschrieben. Gefällt mir aber nicht so gut. Software hat Anforderungen: Funktionale und nicht-funktionale. Zu den nicht-funktionalen gehört eben: "Es muss gut ausschauen!" - Nun und darauf wird manchmal mehr Wert drauf als auf die Wichtigen... (Leider)
Deswegen: Keine Table, sondern schöne farbige Panels mit runden Ecken usw...

Grüße Oli

Nicht Gedanken lesen, sondern nachdenken ;-)
Der gesunde Menschenverstand sagt: das ist nicht sinnvoll... was ist sinnvoll? Obiger Lösungsversuch hört sich sinnvoll an.

Auch eine JTable kann eure Vorgaben erfüllen... mit einem Unterschied: es steckt gleich das richtige Model dahinter und der richtige Controller. Was du machst ist das gleiche noch mal (suboptimal) nachbauen, also ein Rad neu erfinden, aber mit Ecken und Kanten.

[EDIT]
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#renderer
 

didjitalist

Bekanntes Mitglied
ein durchaus gängiges verfahren für sowas sind lokale caches, die auf der festplatte des clients verwaltet werden. das ist genau dann nötig, wenn man die daten nur sequentiell anfordern kann und nicht beliebige fenster. bei stored procedures ist das ab und an der fall. klar könnte man auch immer entsprechend durchs result set fetchen und nicht benötigte daten verwerfen, aber wozu die datenbank unnötig belasten?

das problem bei solchen verfahren ist natürlich zu erkennen, wann man seinen cache updaten muss.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Best Practice Wie viele Referenzen machen Sinn? Weniger ist mehr? Allgemeine Java-Themen 1
D Input/Output Implementierung eines CommandHandlers/Parsers für viele Eingaben Allgemeine Java-Themen 26
T Multithreading: Wie viele Threads sollte ich erstellen? Allgemeine Java-Themen 12
Tacofan Hangman so viele Labels wie Buchstaben Allgemeine Java-Themen 5
K Variablen Konstruktor, unendlich viele Allgemeine Java-Themen 3
E Beliebig viele Worte Allgemeine Java-Themen 5
G Methoden Unterschiedliche viele Parameter Allgemeine Java-Themen 17
L MouseListener für viele Objekte erstellen Allgemeine Java-Themen 16
H Sehr viele Threads effizient Verwalten Allgemeine Java-Themen 13
R Arrayausgabe enthält viele Leerzeichen Allgemeine Java-Themen 4
M Threads Viele Aufrufe aus Thread, komisches Verhalten Allgemeine Java-Themen 8
C Threads Verbraucht eine Zeitabfrage viele Rechen-Ressourcen? Allgemeine Java-Themen 8
J BlueJ Methode hat zu viele Parameter Allgemeine Java-Themen 6
D (Viele) Daten performant speichern und lesen Allgemeine Java-Themen 5
S Viele zip-files zu einem kombinieren..? Allgemeine Java-Themen 3
KrokoDiehl Viele JARs und deren Resourcen Allgemeine Java-Themen 9
S Zu viele Felder. Allgemeine Java-Themen 4
S Viele Bilder -> Speicher ausgelastet? / (De-)serialisierung geht nicht mehr richtig Allgemeine Java-Themen 8
H GUI: RectangleDrawer - zu viele Elemente im Vector für die paint-Methode Allgemeine Java-Themen 6
R Moeglichst viele Datumsstrings in Date Objekte konvertieren? Allgemeine Java-Themen 3
C Viele Informationen aus zwei Collections vergleichen Allgemeine Java-Themen 2
T viele Threads Allgemeine Java-Themen 14
T Designfrage: Viele, kleine Objekte Allgemeine Java-Themen 13
M Beliebig viele Typen bei Generics Allgemeine Java-Themen 3
F Viele generische Parameter sinnvoll? oder besser casten? Allgemeine Java-Themen 10
E Viele if Abfragen auf viele Strings --> Alternative zu if Allgemeine Java-Themen 8
J Viele Fragen. =) Hoffentlich könnt ihr helfen Allgemeine Java-Themen 9
V 1 Methode für viele verschiedene Klassen? Allgemeine Java-Themen 9
S Viele Fragen eines Umsteigers (von .NET) Allgemeine Java-Themen 6
K Zu viele Threads -> langsamer angehen. Allgemeine Java-Themen 3
KeTho1712 Java Swing: JTable standardmäßig füllen, sodass bei Start bereits Datensätze gespeichert sind Allgemeine Java-Themen 1
P Analyse und Kategorisierung großer Datensätze Allgemeine Java-Themen 3
F Doppelte Datensätze zusammenführen Allgemeine Java-Themen 12
S Datensätze in eine ArrayList<Movie> speichern Allgemeine Java-Themen 13
W PrepareStatement und Anzahl der Datensätze Allgemeine Java-Themen 2
8u3631984 Bilder in Datenbank speichern - sinnvoll Allgemeine Java-Themen 5
S Kochbuch bzw. Rezepte-Datenbank app mit Swing..? Allgemeine Java-Themen 5
N relativier Pfad für sqlite-Datenbank in Gradle/IntelliJ Allgemeine Java-Themen 2
Avalon Data Transfer Objekte aus Datenbank erstellen Allgemeine Java-Themen 8
B API Token in Datenbank ablegen? Allgemeine Java-Themen 9
S Einzigartigen String in Datenbank finden und löschen Allgemeine Java-Themen 23
P Datenbank-MiniGUI fügt keine Daten ein Allgemeine Java-Themen 4
Q-bert Strings aus der JList in eine Datenbank speichern Allgemeine Java-Themen 1
Meeresgott Kapselung Tabellen der Datenbank erzeugen. Allgemeine Java-Themen 7
D Daten in MySQL-Datenbank schreiben Allgemeine Java-Themen 13
looparda Unit Test - Abgänigkeit zur Datenbank isolieren Allgemeine Java-Themen 3
T Datentypen MNIST Datenbank auslesen (.gz) Allgemeine Java-Themen 0
O 2 Combobox in Abhängigkeit von der 1 Combobox (Datenbank) Allgemeine Java-Themen 1
L Daten ohne Datenbank richtig abspeichern Allgemeine Java-Themen 5
M Objekt serialisieren/deserialisieren und in einer SQLite-Datenbank speichern Allgemeine Java-Themen 3
F OOP Datenbank-Klasse überall verfübar Allgemeine Java-Themen 2
R Test Umgebung für Datenbank erstellen, was braucht es? Allgemeine Java-Themen 14
D OOP Design Pattern für GUI - Datenbank Anwendung Allgemeine Java-Themen 1
T Zugriff auf Datenbank Allgemeine Java-Themen 1
G Datenbank von nöten? Allgemeine Java-Themen 7
3 Backup von h2-Datenbank-Datei erstellen Allgemeine Java-Themen 6
S Java DateTime für Datenbank Allgemeine Java-Themen 4
F Alternative sun.jdbc.odbc.JdbcOdbcDriver (Access Datenbank) Allgemeine Java-Themen 2
vandread Daten verschlüsseln mit Java oder Datenbank Allgemeine Java-Themen 15
P MYSQL Datenbank Dump einspielen Allgemeine Java-Themen 1
M SQL Datenbank in JAVA Projekt Allgemeine Java-Themen 3
P iTunes Datenbank manipulieren Allgemeine Java-Themen 2
A Ausführbare Java-Datei aus Projekt und Datenbank Allgemeine Java-Themen 3
T Datenbank oder Filesystem? (E-Learning) Allgemeine Java-Themen 2
N Datei aus Datenbank öffnen mit Standardanwendung Allgemeine Java-Themen 2
J Datenbank und OO-Aufsatz Allgemeine Java-Themen 9
M BufferedReader: Vom Logfile zur Datenbank Allgemeine Java-Themen 6
P Klassen Template-Klasse für Datenbank-Abfragen erstellen Allgemeine Java-Themen 2
E JAVA Alternativen zur Datenbank? Allgemeine Java-Themen 7
Dit_ GeoKoordinaten Datenbank (nicht nur Städte) Allgemeine Java-Themen 6
J Progress Bar während Datenbank Erstellung Allgemeine Java-Themen 2
C Datenbank - Textfiles - Anderes Allgemeine Java-Themen 34
T Datenbank lässt sich un Entwicklungsumgebung öffnen, aus .jar aber nicht Allgemeine Java-Themen 9
G JNDI/LDAP/Datenbank Allgemeine Java-Themen 2
Meldanor Speichern der Datenbank - Lohnen sich mehrere Threads? Allgemeine Java-Themen 2
hdi [Free Download] Film-Datenbank Allgemeine Java-Themen 30
G Excel-Daten in Datenbank speichern - Problem mit leeren Feldern Allgemeine Java-Themen 7
K von List getSelected auf ResultSet Datenbank löschen Allgemeine Java-Themen 2
C Java Polling, Server Prozedur oder doch Datenbank? Allgemeine Java-Themen 4
H .dbf (IV) Datenbank einlesen Allgemeine Java-Themen 9
D Recipes / Codeschnipsel Datenbank für Java? Allgemeine Java-Themen 3
T MySQl Datenbank als Array ausgeben Allgemeine Java-Themen 11
M Rechenweg in Datenbank speichern und nutzen Allgemeine Java-Themen 6
E Datenbank/iBatis Fehlermeldung Allgemeine Java-Themen 4
G Datenbank zur laufzeit wechseln Allgemeine Java-Themen 11
N ClassLoader - Laden von Bytecode aus einer Datenbank Allgemeine Java-Themen 6
S Speicherung von Daten: Datenbank(sql) oder xml? Allgemeine Java-Themen 9
F Vector in eine Datenbank speichern? Allgemeine Java-Themen 3
A Problem beim Starten der H2-Datenbank Allgemeine Java-Themen 4
S Datenbank Abfragen mit großen Datenmengen Allgemeine Java-Themen 22
G Datenbank-Anwendung schnell erstellen. Allgemeine Java-Themen 7
P Datenbank Tabelle spiegeln Allgemeine Java-Themen 22
E MySQL-Datenbank <-> HashMap/TreeMap Allgemeine Java-Themen 1
P Zugriff auf die DatenBank Allgemeine Java-Themen 44
H Daten aus MySQL datenbank auslesen und in ArrayList stecken Allgemeine Java-Themen 8
P Timestamp in eine Firebird-Datenbank einfügen Allgemeine Java-Themen 6
P Java Acces Datenbank Problem ! (Brauche eine Abfrage) Allgemeine Java-Themen 5
B Datenbank anlegen Allgemeine Java-Themen 10
N Datenbank vs. Filesystem Allgemeine Java-Themen 5
F datenbank oder csv etc Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben