익명클래스와 람다는 동일하지 않다.
public class AnonymousClassExample {
public AnonymousClassExample() {
}
public static void main(String[] var0) {
AnonymousClassExample$1 var1 = new AnonymousClassExample$1();
var1.execute();
}
}

컴파일하면 AnonymousClassExample$1.class 같은 별도의 내부 클래스 파일이 생성됨.
실제로 클래스 인스턴스가 하나 만들어지고, 그 내부에 메서드가 구현됨.
자바의 전통적인 객체지향 방식.

별도의 클래스 파일이 생기지 않음.
invokedynamic이라는 JVM 명령어와, 런타임에 필요한 코드만 동적으로 생성함.
메서드 핸들(Method Handle), 람다 팩토리 등을 이용해서 훨씬 효율적으로 동작함.
익명 클래스의 경우, AnonymousClassExample$1.class 와 같이 별도의 class 파일을 생성하고, 이 파일이 객체로 만들어져 "콜백" 등으로 사용됨.
하지만, 람다 표현식 자체가 "함수 자체" 를 값처럼 넘기기 위해 사용되다 보니, 별도의 class파일을 생성하지 않고, invokedynamic 명령어와 LambdaMetafactory를 사용하여, 필요할 때만 런타임에 동적으로 함수 객체를 생성함.

예제 코드 : https://github.com/dgseo1101/anonymous_lambda
(순환참조 에러나겠다)