Ponieważ trochę się czasem zajmuje ratowaniem różnych produkcji (mniej niż bym chciał, ale jednak) to wkleję tylko rysunek poglądowy:

Różnice w typowych aplikacjach miedzy np. Kotlinem, a Javą są, na komfort użytkowania aplikacji nie wpływają znacznie. Kod funkcyjny w JVM wygląda słabo w mikrobenchmarkach, ale przeważnie nie stanowi o wydajności aplikacji.
Dla takiego twittera, który działa na setkach serwerów urwanie procenta z CPU to jest oszczędność kasy... i co ciekawe - tam używają Scali. (Był w tym roku ciekawy wykład Chrisa Thallingera jak to poprawki w JVM (Graal) dały im ten jeden procent)
Po prostu bezpieczeństwo, stabilność i czytelność kodu są ważnejsze. Lata temu (rok 2000) byłem na wykładzie ludzi zaangażowanych w kodowanie Apache HTTP, nadal jednego z kluczowych serwerów na uniksach - dla nich też takie były priorytety. Szybkość daleko za czytelnością kodu (wtedy to był dla mnie szok). Dzięki temu udało im się utrzymać jakoś ten projekt (w C!) i (przy okazji) osiągnąć całkiem niezłą szybkość działania. Łatwiej poprawiać czysty sensowny kod niż mętlik.
W tej chwili faktycznie jeden z celów teamu Oracle/ JVM - poprawa działania i diagnostyki(!) kodu funkcyjnego. Z tym, że to nie znaczy, że jest źle, po prostu da się jeszcze poprawić.
Kod funkcyjny ma jedną wielką przewagę w wydajności, jest lepiej skalowalny - nie mutujemy to łatwo rozrzucać.- im więcej rdzeni będzie dochodzić tym ta przewaga bedzie rosnąć. Już teraz to widać przy bigdata (Spark/scala), blockchainach (Haskell!!).
Co do tematu -za słaby jestem z C#, żeby się wypowiadać. Kotlin ma jasne przewagi nad javą - polegające na tym, że powstął później i czerpie z doświadczeń Scali i Javy. Dzięki temu ma dużo prostszą i elegantszą składnię od nowej javy, a wielokrotnie większe mozliwości.
Dla wszystkich nadal biadolacych jak im ta lambda zużyła dwanaście bajtów i 6 cykli CPU - ryjcie proszę w płytkach FPGA, będziecie mieli jeszcze wydajniej, mniej zajmiecie pamięci, mniej zużyjecie prądu i w ogóle będzie wypas. Dlaczego jeszcze nie ryjecie?