Здравствуйте, Evgeny.Panasyuk, Вы писали:
V>>Когда твоя джава получит указатель на объект "откуда-то еще", никакой девиртуализации при вызове не происходит, оно происходит аккурат в аналогичном приведенному сценарии.
EP>Справедливости ради, в некоторых из таких случаев девиртуализацию может сделать JIT
Справделивости ради — нет. ))
Если JIT "не видел", откуда получен объект, то никакой девиртуализации не будет. А если видел — то это он всего-лишь проинлайнил тот самый вызов, в котором встретилось new для целевого объекта. Дык, возможности инлайна в С++ на порядки больше.
EP>Кстати, тут недавно был синтетический бенчмарк, в котором как раз был сделан сильный упор на JIT/девиртуализацию и GC, буквально задача на которой они раскрываются во всей красе — так даже и его получилось заборотьАвтор: Evgeny.Panasyuk
Дата: 29.06.15
подсчётом ссылок и изначально меньшей виртуальностью (примерно то о чём ты говорил).
Синтетические бечмарки фтопку. Реально. Потому что они заставляют на С++ писать АНАЛОГИЧНЫЙ управляемому код исключительно с целью бенчмарка. ))
А в реальной жизни на С++ пишут нифига не аналогичный код, бо система типов такова, что там, где на Джаве или дотнете всё разруливается через интерфейсы и виртуальные вызовы (и только через них, родимых), на С++ всё разруливается на шаблонах еще на этапе компиляции.