This is a question for general knowledge.
I stumbled over this interesting issue in Guava: https://github.com/google/guava/issues/1268
There a smart person complains that the performance of google ImmutableList is much worse then ArrayList. This was due to the fact that there were 3 types of ImmutableList. Empty, Singleton and Regular. Therefore the call sites were converted into megamorphic call sites. They dropped the EmptyImmutableList and then the call sites were converted into Bimorphic sites and the performance improved.
I am interested how kotlin addresses these issues. With kotlin stdlib 99% of the cases we program with interfaces. So how is the issue of megamorphic call sites overcome.