Есть ли способ получить записи из MySQL за пределами максимального размера ArrayList - PullRequest
0 голосов
/ 27 декабря 2018

Я не могу добавить извлеченные записи к объекту ArrayList, поскольку ArrayList имеет максимальный размер Integer.max, а запрос к mysql базе данных извлекает слишком много записей, чем Integer.max.

Я был в spring boot проекте.Нам нужно было решение для извлечения записей из базы данных mysql с использованием spring data jpa.Ниже приведен мой код для извлечения записей:

@Override
public List<HtsLogs> getAllRecords(String from, String to) {
    System.out.println(from+"                "+to);
    List<HtsLogs> listHtsLogs = new ArrayList<HtsLogs>();
    try {
        String sql =  "SELECT em.* FROM local_backup.hts_logs as em  where em.created_date between ? and ? order by em.created_date desc ;";
        Query query = entityManager.createNativeQuery(sql,HtsLogs.class);
        query.setParameter(1, from);
        query.setParameter(2, to);
        listHtsLogs = query.getResultList();
    }catch(Exception ex) {
        System.out.println("exception HtsLOGS exception HtsLOGS exception HtsLOGS ");
        ex.printStackTrace();
    }
    return listHtsLogs;
}

Я ожидал, что все записи будут накапливаться сразу в объекте arraylist, но из-за максимального размера я не могу этого сделать.Я получаю java.lang.OutOfMemoryError: GC overhead limit exceeded ошибку.Есть ли какое-то решение этого ..

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Если увеличение Xmx недостаточно или невозможно, а разбиение на страницы также невозможно, вы можете проверить объект HtsLogs.Возможно, он сможет оптимизировать его, чтобы повысить эффективность использования памяти, выбирая различные типы данных для его полей.

Помните, что все, что неоптимально в этом объекте, будет умножено для каждой записи в этом списке, и если вы действительноиметь количество записей такой величины, которая будет иметь большое значение.

0 голосов
/ 27 декабря 2018

Загрузка всего в память - это то, что вызывает OutOfMemoryError, а не ограничение максимального размера ArrayList.

Для таких случаев в Spring Data JPA предусмотрен механизм нумерации страниц .Вот пример:

import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.CrudRepository;
import java.util.List;

public interface EmployeeRepository extends CrudRepository<Employee, Long> {

  public List<Employee> findByDept(String deptName, Pageable pageable);
}

, где Pageable - интерфейс для информации о нумерации страниц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...