title: Why are Java 8 lambdas invoked using invokedynamic?
body: <p>The <code>invokedynamic</code> instruction is used to help the VM determine the method reference at runtime instead hardwiring it at compile time. </p>
  
  <p>This is useful with dynamic languages where the exact method and argument types aren't known until runtime. But that isn't the case with Java lambdas. They are translated to a static method with well defined arguments. And this method can be invoked using <code>invokestatic</code>.</p>
  
  <p>So then what is the need of <code>invokedynamic</code> for lambdas, especially when there is a performance hit?</p>