![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| CPlusPlusFAN |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 1.11.2005 Где: Воронеж Репутация: нет Всего: нет |
Здравствуйте все!
Пробую работу хэша на слабых ссылках. Для этого напсал код:
Здесь создаётся хэш, в него записываются данные. В одном потоке выводится его размер, в другом по таймеру вызывается сборщик мусора. Ответ предсказуем:
Теперь меняю казалось бы на аналогичный:
Ответ меня удивил:
Собственно говоря, почему так? Ведь боксинг - это создание объекта по примитиву, т.е. по сути то же самое: new Integer(...). Так почему же результаты разные? ЗЫ jdk 6. Это сообщение отредактировал(а) CPlusPlusFAN - 4.5.2012, 16:54 |
||||||||
|
|||||||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Потому что для объектов типа Integer (а так же и для всех остальных враперов над примитивными типами) есть специальный кэш который кеширует объекты в диапазоне [-128, 127] (диапазон можно менять). В этом кэше и лежат ссылки на эти объекты, потому они не удаляются сборщиком мусора и не удаляются из WeakHashMap. Попробуй:
Добавлено через 1 минуту и 46 секунд Кэширование происходит если вызывать Integer.valueOf(int), при вызове конструктора кэширования естественно не происходит. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
| CPlusPlusFAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 1.11.2005 Где: Воронеж Репутация: нет Всего: нет |
LSD, ух ты! Спасибо! Я что-то слышал про кэширование, но не догадался бы.
Плюсик от меня честно заслуженный. |
|||
|
||||
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
|
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |