Вероятно, немой вопрос, но..
Есть ли какие-либо хорошие инструкции для того, сколько памяти основные структуры данных Java используют?
Т.е.: Сколько памяти будет использовано простым POJO с международным участником и a String
участник (говорят, что содержит 10 символьных Строк)? Сколько памяти было бы использовано a List
из 10 из упомянутых объектов?
и т.д.
ОБРАВНИТЕЛЬНЫЙ ДАМА
http: // java.sun.com/docs/books/performance/1st_edition/html/jpramfootprint.fm.html
String/objectemation Использование памяти
http://www.javamex.com/tutorials/memory/string_memory_usage.shtml
Строки цельно сложенно хитрым, когда они держатся на массива символов, который передается с другими строковыми объектами, которые являются подстроками оригинального строкового объекта.
У меня также недавно была та же самая проблема - «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.
Я бы сказал 144 бита для строки (32 для указателя, 80 для 10 символов, 32 для длины int), 32 бита для int и 32 для указателя на объект, что составляет 208 бит. Для списка 10 понадобится 2080 бит для объектов и указателей на них, дополнительный 32 * 2 * 10 для следующего и предыдущего указателей, 32 для длины списка и 32 для указателя. Всего это составляет 2784 бита. И в моем опыте работы с Java в сравнении с тем, что я думаю потребуется (также известен как C), вы применяете умноженный на два множителя, делая его 5568 бит.
В конце концов, если вы беспокоитесь о требованиях к памяти, проверьте и посмотрите! Но довольно сложно проверить на такие маленькие числа... попробуйте вместо них несколько тысяч.