Speicherverbrauch von Strings VS. 16MB RAM Limit pro App

  • Antworten:1
Rafael K.
  • Forum-Beiträge: 2.359

17.02.2011, 13:32:28 via Website

Heyho :)

Ich bin da letztens in eine Falle getappt und würde nun gerne euch anderen an der Erkenntnis partizipieren lassen, die ich nun für den Rest des Lebens gesammelt habe :)

Folgende Situation:

Es werden viele Daten in einen String geladen ... sagen wir 100KB.
Aus diesem String werden gewisse Teile mit Regex ausgelesen und in Objekten gespeichert.
Der Orginal String ist eine lokale Methodenvariable und SOLLTE mit dem Verlassen der Methode zum Futter für den GC werden.

Wird er aber nicht !

Problem ist nämlich, dass Strings, die per substring() erzeugt werden auf den internen Orginal-Char-Array verweisen und lediglich ein offset und end definieren, also quasi einen View darstellen ... und Matcher.group() arbeitet wohl intern genauso.
Das spart solange Speicher, wie man ALLE Strings weiterverwendet.
Soll der Orginalstring aber nur temporär sein, wird er leider von den substrings weiter referenziert und belegt Speicher.

Bei 16 MB Heap im worst-case sollte man da also tierisch aufpassen !

Abhilfe schafft es die substrings nochmal explizit als neue Strings anzulegen.

Quelle: http://www.javamex.com/tutorials/memory/string_saving_memory.shtml

Ich hoffe das hilft hier einigen :)

p a

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

17.02.2011, 14:45:04 via Website

gut zu wissen ;)

swordiApps Blog - Website

Antworten