Size: a a a

2020 June 13

VS

Vladimir Sitnikov in pro.jvm
Vladimir Sitnikov
Объекты на стеке -- нет (в Oracle JVM). Но, если VM видит, что ссылка на объект никуда не утекает (с учётом inline), то, как я писал выше объект превратится в список полей, которые уже могут либо вообще исключиться (если не используются), либо расположиться на стеке
Как обстоят дела в OpenJ9 не знаю
источник

U

UsernameAK in pro.jvm
кстати, почему у меня по ощущениям джава не сильно медленнее плюсов
источник

U

UsernameAK in pro.jvm
при примерно одинаковом коде
источник

T

Tagir in pro.jvm
Vladimir Sitnikov
Объекты на стеке -- нет (в Oracle JVM). Но, если VM видит, что ссылка на объект никуда не утекает (с учётом inline), то, как я писал выше объект превратится в список полей, которые уже могут либо вообще исключиться (если не используются), либо расположиться на стеке
Почему-то все к этому стеку привязываются постоянно. Какая-то мантра, мол, на стеке быстро, в куче медленно. Между тем скаляризация может и в регистры объект распихать, если совсем избавиться не получилось
источник

T

Tagir in pro.jvm
Это две разных стадии компиляции - скаляризация и аллокация регистров с возможностью спиллинга при необходимости
источник

VS

Vladimir Sitnikov in pro.jvm
Tagir
Почему-то все к этому стеку привязываются постоянно. Какая-то мантра, мол, на стеке быстро, в куче медленно. Между тем скаляризация может и в регистры объект распихать, если совсем избавиться не получилось
Объект в регистры -- нет, не может. Только поля, и только, если он не утекает
источник

U

UsernameAK in pro.jvm
Tagir
Почему-то все к этому стеку привязываются постоянно. Какая-то мантра, мол, на стеке быстро, в куче медленно. Между тем скаляризация может и в регистры объект распихать, если совсем избавиться не получилось
> Почему-то все к этому стеку привязываются постоянно
в некоторых юзкейсах стек реально быстрее
источник

T

Tagir in pro.jvm
Vladimir Sitnikov
Объект в регистры -- нет, не может. Только поля, и только, если он не утекает
Ты меня не понял. Я именно это и сказал
источник

T

Tagir in pro.jvm
UsernameAK
> Почему-то все к этому стеку привязываются постоянно
в некоторых юзкейсах стек реально быстрее
В какой конкретно момент происходит ускорение?
источник

U

UsernameAK in pro.jvm
Tagir
В какой конкретно момент происходит ускорение?
когда аллоцируется огромное количество однотипных простых объектов, в какой же еще?
источник

T

Tagir in pro.jvm
И? Чем аллокация на стеке лучше бамп-аллокации в тлабе?
источник

VS

Vladimir Sitnikov in pro.jvm
Tagir
И? Чем аллокация на стеке лучше бамп-аллокации в тлабе?
кэш-локалили, ноу криминалити
источник

T

Tagir in pro.jvm
А типа тлаб весь из себя рваный?
источник

U

UsernameAK in pro.jvm
Tagir
И? Чем аллокация на стеке лучше бамп-аллокации в тлабе?
ничем, но разве второе бывает в жаве?
источник

VS

Vladimir Sitnikov in pro.jvm
Вообще говоря, аллокация на стеке это тоже pointer bump, но чистка гораздо проще, т.к. это bump назад
источник

OO

Oleksandr Olgashko in pro.jvm
UsernameAK
ничем, но разве второе бывает в жаве?
new Array[1000]
источник

N

Nick in pro.jvm
Constantine
А если вот допустим есть код который работает на stream, а в спринге допустим точно такая же работа кода, но всё на for -loop

Он скажет, что это идентичный код, просто по разному реализован🤔
кстати, @Tagir_Valeev раз уж появился, подскажи если знаешь сильно больно это было делать в идее, чтобы стримы в циклы и обратно транформировались?
источник

T

Tagir in pro.jvm
Vladimir Sitnikov
Вообще говоря, аллокация на стеке это тоже pointer bump, но чистка гораздо проще, т.к. это bump назад
Ну если все объекты - это мусор, то копирующий гц тоже отработает минорную сборку очень быстро
источник

T

Tagir in pro.jvm
Он ведь копирует выжившие объекты
источник

T

Tagir in pro.jvm
Nick
кстати, @Tagir_Valeev раз уж появился, подскажи если знаешь сильно больно это было делать в идее, чтобы стримы в циклы и обратно транформировались?
Я делал это. Весьма приятно
источник