Почему escape-анализ не запускается в этом конкретном примере?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему escape-анализ не запускается в этом конкретном примере?

Сообщение Anonymous »

Это используется в JDK 17, и все тесты выполняются с памятью 256 МБ. Я тестировал взаимодействие escape-анализа с потоками с помощью нескольких простых тестов и столкнулся с чем-то интересным.
Приведенный ниже код отлично запускает escape-анализ (проверено добавлением -verbose:gc< /code> и запуск кода с -XX:-DoEscapeAnaлиз. Запускается без активности EA для печати GC, а с EA - нет)

Код: Выделить всё

public int mapSum_boxed(){
record TestObject(int i){};
return IntStream.range(0, 1_000_000_000)
.boxed()
.map(x-> new TestObject(1))
.mapToInt(x-> x.i())
.sum();
}
Однако приведенный ниже код не может запустить escape-анализ, и я получаю информацию о деятельности GC, выводимую на консоль:

Код: Выделить всё

public int mapSum_boxed(){
record TestObject(int i){};
return IntStream.range(0, 1_000_000_000)
.boxed()
.map(x-> 1) //  new TestObject(1))
.mapToInt(x-> x.i())
.sum();
}
Кто-нибудь знает, почему это происходит? Сначала я думал, что операция map(x->1) каким-то образом преобразует весь поток в тип Integer, но это кажется маловероятным... и это действительно должно было произойти в boxed()< /code> в любом случае.

Подробнее здесь: https://stackoverflow.com/questions/793 ... ar-example
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»