Desempenho horrível e grande volume de heap da referência do construtor Java 8?

Eu apenas tive uma experiência bastante desagradável em nosso ambiente de produção, causandoOutOfMemoryErrors: heapspace..

Rastreei o problema pelo meu uso deArrayList::new em uma função.

Para verificar se isso está realmente executando pior que a criação normal por meio de um construtor declarado (t -> new ArrayList<>()), Escrevi o seguinte método pequeno:

public class TestMain {
  public static void main(String[] args) {
    boolean newMethod = false;
    Map<Integer,List<Integer>> map = new HashMap<>();
    int index = 0;

    while(true){
      if (newMethod) {
        map.computeIfAbsent(index, ArrayList::new).add(index);
     } else {
        map.computeIfAbsent(index, i->new ArrayList<>()).add(index);
      }
      if (index++ % 100 == 0) {
        System.out.println("Reached index "+index);
      }
    }
  }
}

Executando o método comnewMethod=true;&nbsp;fará com que o método falhe comOutOfMemoryError&nbsp;logo após o índice atingir 30k. ComnewMethod=false;&nbsp;o programa não falha, mas continua batendo até ser morto (o índice atinge facilmente 1,5 milhão).

PorqueArrayList::new&nbsp;criar tantosObject[]&nbsp;elementos na pilha que causaOutOfMemoryError&nbsp;tão rápido?

(A propósito - isso também acontece quando o tipo de coleção éHashSet.)