Большая разница во времени между классом Java Lambda и Anonymous

Мне было интересно узнать производительность создания экземпляров лямбда-кода java8 для одного и того же анонимного класса. (Измерение выполнено на win32 java build 1.8.0-ea-b106). Я создал очень простой пример и измерил, если Java предлагает некоторую оптимизациюnew оператор пока создает лямбда-выражение:

static final int MEASURES = 1000000;
static interface ICallback{
    void payload(int[] a);
}
/**
* force creation of anonymous class many times
*/
static void measureAnonymousClass(){
    final int arr[] = {0};
    for(int i = 0; i < MEASURES; ++i){
        ICallback clb = new ICallback() {
            @Override
            public void payload(int[] a) {
                a[0]++;
            }
        };
        clb.payload(arr);
    }
}
/**
* force creation of lambda many times 
*/
static void measureLambda(){ 
    final int arr[] = {0};
    for(int i = 0; i < MEASURES; ++i){
        ICallback clb = (a2) -> {
            a2[0]++;
        };
        clb.payload(arr);
    }
}

(Полный код можно взять там:http://codepad.org/Iw0mkXhD) Результат довольно предсказуемый - лямбда побеждает 2 раза.

Но действительно мало сдвига, чтобы сделатьзакрытие показывает очень плохое время для лямбды. Анонимный класс побеждает 10 раз! Теперь анонимный класс выглядит так:

ICallback clb = new ICallback() {
        @Override
        public void payload() {
            arr[0]++;
        }
    };

И лямбда делает следующее:

ICallback clb = () -> {
            arr[0]++;
        };

(Полный код можно взять там:http://codepad.org/XYd9Umty Может кто-нибудь объяснить мне, почему существует такая большая (плохая) разница в обработке замыкания?

Ответы на вопрос(1)

Ваш ответ на вопрос