Руководство по памяти Java - PullRequest
8 голосов
/ 12 января 2010

Вероятно, глупый вопрос, но ..

Есть ли хорошие рекомендации относительно того, сколько памяти потребляют базовые структуры данных Java?

Т.е.: сколько памяти будет потребляться простым POJO с элементом int и элементом String (скажем, содержит строку из 10 символов)? Сколько памяти будет использовано List из 10 указанных объектов?

и т.д.

Ответы [ 4 ]

6 голосов
/ 12 января 2010

объем оперативной памяти
http://java.sun.com/docs/books/performance/1st_edition/html/JPRAMFootprint.fm.html

Использование памяти строк / объектов
http://www.javamex.com/tutorials/memory/string_memory_usage.shtml

1 голос
/ 12 января 2010

Строки общеизвестно хитры, поскольку они держатся за массив символов внизу, который используется совместно с другими объектами String, которые являются подстроками исходного объекта String.

0 голосов
/ 12 января 2010

Гэри Севицкий из IBM Research написал несколько работ по анализу и контролю раздувания памяти в программах Java. Последняя половина его списка публикаций выглядит релевантной вашему запросу.

Я посетил его учебник по этому предмету на OOPSLA 2008 и нашел его хорошим введением в этот пугающий, в основном избегаемый аспект Java.

0 голосов
/ 12 января 2010

Я бы сказал 144 бита для строки (32 для указателя, 80 для 10 символов, 32 для длины int), 32 бита для int и 32 для указателя на объект, что составляет 208 бит. Для списка из 10 потребуется 2080 битов для объектов и указателей на них, дополнительные 32 * 2 * 10 для следующего и предыдущего указателей, 32 для длины списка и 32 для указателя. Это составляет всего 2784 бита. И по моему опыту работы с Java против того, что, как я думаю, потребуется (он же C), вы применили множитель, умноженный на два, и сделали его 5568 бит.

В конце дня, если вас беспокоит потребность в памяти, протестируйте ее и посмотрите! Но проверить такое небольшое количество довольно сложно ... попробуйте несколько тысяч из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...