PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : jTable - maximale Größe?



sim4000
16.12.2007, 17:24
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.

supersucker
16.12.2007, 17:39
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.

sim4000
16.12.2007, 17:45
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.

supersucker
16.12.2007, 18:05
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

bytepool
16.12.2007, 18:07
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

sim4000
16.12.2007, 18:50
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...

supersucker
16.12.2007, 19:05
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.

sim4000
16.12.2007, 19:24
Hehe. *hand.vor.den.kopf.hau*
Du hast mal wieder Recht gehabt. :)
Lösung:
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.