jTable - maximale Größe?

sim4000

sim4000

Lebende Foren Legende
Hallo zusammen.
Ich bin gerade dabei, mir ein kleines Programm zu schreiben, welches Daten aus einer Datenbank ausliest und sie in einer JTable ausgibt.
Funktioniert auch alles ganz super.

Nur was passiert wenn das Statement mal ne halbe Million Datensätze ausspucken würde? Da würde mir doch das Programm bestimmt ins Gesicht springen. (Umgangssprachlich)
Mit ca 2000 Datensätzen läuft es noch relativ flüssig. Nur wo ist das das Maximum?

Wie kann man also heraus finden, wie viele Datensätze in das Array von Typ Object (Object[][]) rein passen, welches die Daten zum JTable transportiert?

Lg, sim.
 
Ganz einfach, wie viel du da reinpacken kannst hängt davon ab, wieviel du der JVM an Speicher gibst.

IMHO sind das per default 64 MB.

Wenn du das erhöhen willst, musst du java mit den entsprechenden Optionen -Xmx -Xms starten.
 
Erhöhen is käse.
Da das Proggie ja auch auf an deren Rechnern funktionieren soll, ohne das ich damit das halbe/ganze System lahm lege.

Kann man sich für den Fall das halt zu viel Speicher benötigt wird, ne Abbruchbedingung erstellen?
So das dass Programm / das System keinen Abgang macht. Denn genau das hab ich eben geschafft.
Hab mal ne 2Mio-Datensätze Tabelle gebaut und die mal ausgelesen. :devil: Konnte das System neu starten, weil gar nix mehr ging. :headup:

Und genau das will ich verhindern.
 
Klar,

du kannst dir einfach über die Klasse Runtime anzeigen lassen wieviel Speicher gerade benutzt wird und dann ggf. abbrechen.

long freeMemory()
Returns the amount of free memory in the Java Virtual Machine
 
hi,

naja, die Struktur der Datenbank und der Tabellen muesste dann ja jetzt schon feststehen, d.h. du kannst dir doch einfach eben selber ausrechnen wieviel Speicher pro Datensatz benoetigt wird, und entsprechend ein Limit setzen. Einfach vorher nochmal mit einem select statement oder so die Anzahl der Datensaetze auslesen, und einen Fehler ausgeben wenn das Limit ueberschritten wuerde, bzw. nur bis dahin die Datensaetze auslesen...
Oder nicht?

mfg,
bytepool
 
Das mit dem Freien speicher is schlecht.
Weil wenn kein freier Speicher mehr da ist, ist es ja schon zu spät.

Ich hab auch an Bytepools Vorschlag gedacht.
Das einzigste Problem ist, das ich nicht vorher wissen kann, wie die Ausgabe aussieht, weil es sich bei dem Programm um einen MySQL-Client handelt. Man kann also eine x-beliebige Query eingeben.

Ich hab keinen Plan, wie ich ein effektives Limit festlege. Ich kann ja nicht einfach sagen, bei 5000 Datensätzen ist Schluss.
Totales Gehirnkribbeln...
 
Das mit dem Freien speicher is schlecht.
Weil wenn kein freier Speicher mehr da ist, ist es ja schon zu spät.

Jo,

mitdenken wäre nicht schlecht von deiner Seite aus.

Wo ist das Problem?

Du prüfst halt alle x-Datensätze ob du noch mehr als y MB freien Speicher hast und sagst dann halt bspw.:

Wenn nur noch 10 MB -> Abbrechen.

Man kann es sich natürlich auch kompliziert machen.
 
Hehe. *hand.vor.den.kopf.hau*
Du hast mal wieder Recht gehabt. :)
Lösung:
Code:
if(Runtime.getRuntime().freeMemory()<10000000) { this.overflow(); return new Object[0][0]; }
Das wird beim zusammenbau des Arrays bei jedem Durchlauf geprüft.
Die Methode overflow() ist einfach die Fehlerausgabe.

Danke sehr. :)
Lg, sim.
 
Zurück
Oben