RequestScope представляет утечку Classloader на TomEE 8 / OpenJDK 11 - PullRequest
0 голосов
/ 18 октября 2019

Отслеживая утечку загрузчика классов в моем веб-приложении TomEE, я создал минималистичное приложение (одна страница JSF, один класс) и понял, что это уже создает утечку загрузчика классов.

Утечки вводятся, например, когда: * используются перечисления * используются определенные лямбды (см. Пример кода) * используются области действия CDI (см. Пример кода) * предоставляется файл beans.xml * ...

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

@Named   //  no leak
@RequestScoped  // introduces a leak!
public class PrincipalTest {

    public String userName() {
        return "User name from bean.";
    }

    // some lambdas will remain instanciate after app is stoped
    public List<String> names(){
        List<String> list = new ArrayList<>();
        list.add("aaa");list.add("abb");list.add("acc");
        // this lambda implementation is fine:
        return list.stream()
                .filter(s -> s.startsWith("a"))
                .collect(Collectors.toList());

          // this introduces a leak:
//        return list.stream()
//                .collect(Collectors.toList());        
    }

Я в значительной степени запутался в этом и чувствую, что у меня нет шансов когда-либо получить «реальное» приложение с бесплатной утечкой классов. Каковы ваши переживания?

Кто-нибудь может подтвердить это поведение? (Я загрузил свои тестовые источники в https://1drv.ms/u/s!AlHB9FAlFWW_iLkHPeUguiu2HSZ8FA?e=2eiBHM - на тот случай, если кому-нибудь понравится играть с ним.)

...