Инструкция по памяти Java

Вероятно, немой вопрос, но..

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

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

и т.д.

8
задан Marcus Leon 12 January 2010 в 14:40
поделиться

4 ответа

6
ответ дан 5 December 2019 в 21:19
поделиться

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

1
ответ дан 5 December 2019 в 21:19
поделиться

У меня также недавно была та же самая проблема - «localhost», которая занимает 15 секунд, чтобы загрузить, но 127.0.0.1 загрузка мгновенно.

Однако сейчас я полностью решил свою проблему, поэтому пишу здесь в надежде, что она кому-то поможет.

Моя проблема совпала с покупкой беспроводного маршрутизатора D-Link DIR-655, поэтому, попробовав многие из любезных «исправлений» на этом форуме, я вернулся к настройкам маршрутизатора в поисках ответа.

В конечном итоге я обнаружил настройку на странице SETUP - NETWORK SETTINGS. Был установлен флажок «Включить DNS-ретрансляцию», поэтому я прочитал об этом, и он, очевидно, позволяет маршрутизатору искать DNS-адреса с сервера поставщика услуг Интернета. Это, очевидно, не желательно для «локального» адреса на моем собственном ПК, и поэтому я попытался его отцепить.... И ЭЙ ПРЕСТО, ЭТО СРАБОТАЛО!!!

Я надеюсь, что эта работа и для некоторых из вас!

Все лучшее,

Роб

-121--4716784-

'*' означает 0 или более случаев «АА» должен сделать трюк.

Вопрос в том, хотите ли вы, чтобы вещь соответствовала «AAA». В этом случае вам придется сделать что-то вроде:

r = re.compile('(^|[^A])(AA)+(?!A)',)
r.search(p)

Это сработает для соответствия четному (и только четному) числу 'A'.

Теперь, если вы хотите сопоставить «если есть какое-либо четное число последующих букв», это сделает хитрость:

re.compile(r'(.)\1')

Однако это не исключит «нечётные» вхождения. Но из вашего вопроса непонятно, действительно ли вы этого хотите.

Обновление: Это работает на тестовые случаи:

re.compile('^([^A]*)AA([^A]|AA)*$')
-121--3085416-

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

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

0
ответ дан 5 December 2019 в 21:19
поделиться

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

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

0
ответ дан 5 December 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: