Size: a a a

JPoint, Java-конференция

2020 February 12

AV

Alexei Vinogradov in JPoint, Java-конференция
Max Turnaev
Вижу смысл в final полях класса, если есть возможность. Как бы автоматически подписываешься под контракт, что поле один раз инициализировалось и больше изменяться не может
я не спорю, что у final есть применение, не только классическое - в литеральных константах.
Но вот так чтоб вообще везде. В буквальном смысле везде.
источник

T

Tagir in JPoint, Java-конференция
Alexei Vinogradov
или java туповата и не может  компилировать эффективный код без этих подсказок?
Компилятору абсолютно наплевать. По байткоду ты не отличишь был локал финальным или нет
источник

T

Tagir in JPoint, Java-конференция
Никакого отличия перформанса не будет вообще
источник

r

rokrbek in JPoint, Java-конференция
источник

T

Tagir in JPoint, Java-конференция
Типикал стэкэксчендж. Куча плюсов ответу, где про оптимизацию написано, что никогда не имело отношения к реальности
источник

AV

Alexei Vinogradov in JPoint, Java-конференция
Tagir
Компилятору абсолютно наплевать. По байткоду ты не отличишь был локал финальным или нет
вот! значит даже перформансу не поможет
источник

r

rokrbek in JPoint, Java-конференция
Alexei Vinogradov
вот! значит даже перформансу не поможет
Так оно не для перфоманса, а чтобы в ногу себе не стрелять
источник

r

rokrbek in JPoint, Java-конференция
Tagir
Типикал стэкэксчендж. Куча плюсов ответу, где про оптимизацию написано, что никогда не имело отношения к реальности
И это не учитывая плашку "уже есть ответ в другом вопросе"
источник

A

AlexJok in JPoint, Java-конференция
Раз уж пошла такая пьянка. Знает кто-нибудь, эффективный способ сделать так, чтобы чувствительные данные не попали в heap dump.
Есть общая рекомендация не хранить пароли в String и использовать массив char например.
А есть ещё способы?
источник

T

Tagir in JPoint, Java-конференция
AlexJok
Раз уж пошла такая пьянка. Знает кто-нибудь, эффективный способ сделать так, чтобы чувствительные данные не попали в heap dump.
Есть общая рекомендация не хранить пароли в String и использовать массив char например.
А есть ещё способы?
Не снимать хипдампы
источник

T

Tagir in JPoint, Java-конференция
Массив чар - это полумера всё-таки
источник

СЦ

Сергей Цыпанов in JPoint, Java-конференция
Tagir
Никакого отличия перформанса не будет вообще
Шипилёв в докладе про Шенанду вроде утверждал, что если все поля файнал, то "заморозка" в конце конструирования объекта даёт возможность убрать некоторые барьеры памяти и небольшой прирост такие есть
источник

T

Tagir in JPoint, Java-конференция
Речь про локалы, а не про поля
источник

T

Tagir in JPoint, Java-конференция
Поля то конечно надо файнал, с этим никто не спорит
источник

AG

Asad Ganiev in JPoint, Java-конференция
Tagir
Компилятору абсолютно наплевать. По байткоду ты не отличишь был локал финальным или нет
Я конечно не знаток байткодов но отличия есть (хотя и вправду трудно отличить была ли локальная переменная final)
источник

AG

Asad Ganiev in JPoint, Java-конференция
код:
String hello = "Hello World";

System.out.println(hello);


байткод:
0: getstatic     #2
3: ldc           #3
5: invokevirtual #4
8: return
источник

T

Tagir in JPoint, Java-конференция
Asad Ganiev
Я конечно не знаток байткодов но отличия есть (хотя и вправду трудно отличить была ли локальная переменная final)
Отличия только если переменная compile time constant. Это уже обсудили в соседнем чате. Если нет, то никак не отличишь. А хранить compile time constant в локале пригождается исключительно редко
источник

AG

Asad Ganiev in JPoint, Java-конференция
с файнал:
0: ldc           #2
2: astore_1
3: getstatic     #3
6: aload_1
7: invokevirtual #4
10: return
источник

T

Tagir in JPoint, Java-конференция
Ещё -g включи для полноты картины
источник

AG

Asad Ganiev in JPoint, Java-конференция
так вроде одинаково
источник