Ler um csv e guardar os dados em um ArrayList de objetos

Bom dia galera !
Tenho um arquivo csv de mais de 20 mil linhas e mais de 25 atributos. Quero poder ler os dados do arquivo e guarda-los em uma lista. O melhor seria numa lista de objetos.
Até agora fiz isso

public static void main(String[] args) throws IOException {

String archCSV = "C:\\Users\\c\\OneDrive\\Desktop\\Dados/Products.csv";
CSVReader csvReader = new CSVReader(new FileReader(archCSV));
String[] fila = null;


	int i = 0;
List<Produtos> prods = new ArrayList<>();
Produtos p[] = new Produtos [20000];

while((fila = csvReader.readNext()) != null) {
	
	p[i] = new Produtos();
	p[i].setId(i, fila[0]); //Exemplo de como pretendo guardar todos os dados do arquivo em cada atributo da classe Produtos
	prods.add(p[i]);
	
	i++;
}
csvReader.close();

Estou usando o open csv pra ler o arquivo. Quando executo esse código ele da erro java.lang.OutOfMemoryError: Java heap space. Como seria a melhor forma de fazer esse trabalho de guardar o arquivo em um ArrayList de objetos?

É porque você está tentando instanciar um array de 20 mil posições.
Você não precisa desse array, você já tem um List<Produtos>.

Primeiro renomeie sua classe Produtos para o singular, Produto, pois cada instância dela representa um único produto e não vários.

List<Produto> produtos = new ArrayList<>();
String[] campos = null;
while ((campos = csvReader.readNext()) != null) {
    Produto produto = new Produto();
    produto.setAlgumaCoisa(campos[0]);
    produto.setOutraCoisa(campos[1]);
    produto.setMaisAlgumaCoisa(campos[2]);
    produtos.add(produto);
}
1 curtida

Muito Obrigada !! Me ajudou muito !