When the Kotlin compiler (on a modern target) compiles `val r = Runnable { work() }` (a lambda for a SAM/functional interface), it can use `invokedynamic` with `LambdaMetafactory` instead of generating a synthetic anonymous class. What is the principal runtime consequence of this `invokedynamic`-based strategy compared to the old per-lambda class approach?
val r = Runnable { work() }