- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
}
return h;
}
roman-kashitsyn 20.03.2014 12:57 # 0
Да это же сишники писали!
Не исключено, что оптимизация, связанная с локальностью переменной, но это надо дизассемблировать и измерять.
roman-kashitsyn 20.03.2014 13:06 # +3
Пример: строка 77
Dummy00001 20.03.2014 17:06 # 0
Мой реверс-инжиниринг мыслительного процесса говорит что там кто-то думал насчет `byte []`. И в будущем прикручивание лучшей хэш функции. Потому что *31 это относительно слабая хэш функция.
"Это какая-то особая уличная магия с оптимизацией?"
Если value это внутрее представление, то эта строка кода скорее всего будет выкинута оптимизатором. Потому что ничего не делает.
myzone 23.03.2014 01:08 # 0
stp008 24.04.2014 04:50 # 0
roman-kashitsyn 24.04.2014 07:57 # 0
guest 29.04.2014 10:12 # 0
При вызове метода hashCode() у одного экземпляра java.lang.String из разных потоков будет гонка потоков (data race) по полю hash.
То же относится и к полю value.
roman-kashitsyn 29.04.2014 10:34 # +2
bormand 29.04.2014 10:46 # −1
bormand 29.04.2014 10:55 # −1
roman-kashitsyn 29.04.2014 11:02 # +2
bormand 29.04.2014 11:03 # −1
roman-kashitsyn 29.04.2014 11:05 # 0
bormand 29.04.2014 11:09 # +3
roman-kashitsyn 29.04.2014 11:17 # +3
bormand 29.04.2014 11:20 # −1
Где там об этом написано? :)
roman-kashitsyn 29.04.2014 11:29 # +2
> This can result in a situation where a thread sees the first 32 bits of a 64-bit value from one write, and the second 32 bits from another write
если бы части по 32 бита были не атомарными, возможных комбинаций было бы гораздо больше (например, 0-15 и 32-47 биты от первого, остальные от второго).
Но явной фразы не нашлось :(
bormand 29.04.2014 11:31 # −1
Ну это же всего лишь пример ситуации, которая может возникнуть, а не полный список вариантов? :)
roman-kashitsyn 29.04.2014 11:36 # +2
inkanus-gray 29.04.2014 17:07 # +1
roman-kashitsyn 29.04.2014 17:25 # +3
inkanus-gray 29.04.2014 17:34 # +2
roman-kashitsyn 29.04.2014 17:37 # +2
inkanus-gray 29.04.2014 17:41 # +1
bormand 29.04.2014 17:42 # +1
Ее разве не закопали?
inkanus-gray 29.04.2014 17:43 # +1
defecate-plusplus 29.04.2014 17:57 # +1
есть гурманы, которых устраивает пользоваться однажды аттестованным по ИБ перечнем версий ПО
bormand 29.04.2014 18:03 # +1
И пофиг, что это ПО давным-давно превратилось в дуршлаг ;)
defecate-plusplus 29.04.2014 18:38 # +1
но зато "модель нарушителя" ёпт
а уж как волокита по ИБ тормозит прикрытие 0-day уязвимостей
инициативный дурак хуже вредителя
guest 29.04.2014 18:52 # +13
guest 29.04.2014 18:32 # +16
inkanus-gray 29.04.2014 11:32 # 0
bormand 29.04.2014 11:33 # +7
Так что все придумано до нас ;)
3.14159265 29.04.2014 13:13 # +8
guest 29.04.2014 21:32 # +15
bormand 29.04.2014 10:45 # −2
bormand 29.04.2014 11:01 # +2
guest 27.10.2014 23:44 # +1
Вообще, полезно выносить в локалы что-то, что вы собираетесь использовать в циклах, если это что-то, конечно, не должно быть вдруг не внезапно изменено другим тредом прям посреди цикла, а вы как раз только этого и ждете.
guest 27.10.2014 23:45 # −1