Wahrscheinlich eine dumme Frage, aber ..
Gibt es irgendwelche guten Richtlinien dafür, wie viel Speicher grundlegende Java-Datenstrukturen verbrauchen werden?
Ie: Wie viel Speicher wird von einem einfachen POJO mit einem int-Member und einem String
-Member verbraucht (sagen wir, dass es einen 10-char-String enthält)? Wie viel Speicher würde von einem List
von 10 der genannten Objekte verbraucht?
usw.
Strings sind notorisch knifflig, weil sie sich an einem Zeichen-Array festhalten, das mit anderen String-Objekten geteilt wird, die Teilstrings eines ursprünglichen String-Objekts sind.
Ich würde sagen, 144 Bits für die Zeichenfolge (32 für den Zeiger, 80 für die 10 Zeichen, 32 für die Länge int), 32 Bits für den Int und 32 für den Zeiger auf das Objekt, wodurch 208 Bits. Eine Liste von 10 würde 2080 Bits für die Objekte und Zeiger auf sie benötigen, weitere 32 * 2 * 10 für die nächsten und vorherigen Zeiger, 32 für die Länge der Liste und 32 für den Zeiger. Dies ergibt 2784 Bits insgesamt. Und in meiner Erfahrung mit Java vs, was ich denke, dass es erfordert (aka C), wenden Sie einen Multiplikator mal zwei an und machen es 5568 Bits.
Am Ende des Tages, wenn Sie sich Sorgen über Speicheranforderungen machen, testen Sie es und sehen Sie! Aber es ist ziemlich schwer für so kleine Zahlen zu testen ... probiere stattdessen ein paar Tausend.
Gary Sevitsky von IBM Research hat mehrere Artikel zur Analyse geschrieben und das Steuern des Speicheraufbaus in Java-Programmen. Die neuere Hälfte der Veröffentlichungsliste scheint für Ihre Anfrage relevant zu sein.
Ich habe ein Tutorial von ihm bei OOPSLA 2008 zu diesem Thema besucht und fand es gut Einführung in diesen beängstigenden, meist vermiedenen Aspekt von Java.
Tags und Links java memory memory-management jvm