Swing hat in meiner oberflächlichen Erfahrung durchaus die Eigenschaft, manche Dinge mit 10fach nötigem Platz zu speichern, besonders paar (kleine) Bilder sprengen schnell den Standardspeicher von 64 MB,
andererseits sollte String einfach zu handeln sein,
andererseits wiederum gerade bei folgenden eher abschreckenden Link gelandet, wenn auch über JTextPane, was einiges mehr macht
http://www.javalobby.org/forums/thread.jspa?threadID=15319
ich wollte gerade auch im Quellcode schönen simplen StringBuilder-Aufruf zu Tage bringen,
aber irgendwo bei PlainDocument und GapContent habe ich doch lieber aufgegeben, JTextArea ist auch nicht ohne…,
verwendet zumindest Standard-Document-Klassen die auch Undo können,
allgemein dann zumindest noch die einfachsten Erkenntnisse zum besten gegeben:
setText(getText().substring())
ist auf jeden Fall für sich ungünstig, gerade hinsichtlich Performance- statt Speicher-Frage,
damit wird der gesamte Text durchgeschüttelt, 1 MB Aufwand,
ok, substring() selber ist vielleicht noch so schlau, das große char[] des alten Strings weiterzuverwenden, aber was dann setText() arbeiten muss?
beim Hinzufügen/ Vergrößern wäre String-Arbeit direkt in jedem Fall mit aufwendiger Kopie beschäftigt
StringBuffer und StringBuilder gehören an dieser Stelle einfach mal erwähnt, allgemein wichtig, damit Hinzufügen und auch Entfernen schnell gemacht,
allerdings außerhalb der JTextArea wohl nicht so hilfreich: nach jeder Änderung den String aus dem Builder zu holen, zu generieren und mit setText() zu übergeben wird genauso mächtig Arbeit machen, evtl. 2x, je nach Aufwand von setText() intern
hmm, das ist mir nun bisher vager als ich am Anfang plante, aber nun noch ein gewisser Schwung:
A)
doch lieber ganz auf JTextArea setzen und auf günstige Implementierung intern hoffen, zumindest wenig Änderungsaufwand,
Entfernen mit replaceRange:
Einfügen naheliegend mit der append()-Methode
B)
Testen und Messen, was JTextArea leisten kann
C)
Ideenschmiede gleich weiterziehend:
die Logeinträge als Strings oder höhere Objekte (zusätzliche Daten Uhrzeit, Wichtigkeit usw.) in einer Liste speichern,
in einer JTable anzeigen, mit eigenem Model welches immer nur die aktuell benötigten angezeigten 20 liefert,
da liegt die Datenkontrolle voll bei dir und MB-große Strings, ob zu verändern oder nicht, kommen nicht vor