@Khombachke
Java programmer

Почему добавление элементов в ArrayList происходит «пачками» по 10 элементов?

Есть задача - распарсить кучу объектов, чуть больше 200к и добавить их в лист. Вот лог добавления элементов

[2021-10-04 10:58:05,213]-[export-1] INFO - new object process: 32060
[2021-10-04 10:58:05,418]-[export-1] INFO - new object process: 32061
[2021-10-04 10:58:05,418]-[export-1] INFO - new object process: 32062
[2021-10-04 10:58:05,418]-[export-1] INFO - new object process: 32063
[2021-10-04 10:58:05,418]-[export-1] INFO - new object process: 32064
[2021-10-04 10:58:05,418]-[export-1] INFO - new object process: 32065
[2021-10-04 10:58:05,418]-[export-1] INFO - new object process: 32066
[2021-10-04 10:58:05,418]-[export-1] INFO - new object process: 32067
[2021-10-04 10:58:05,418]-[export-1] INFO - new object process: 32068
[2021-10-04 10:58:05,418]-[export-1] INFO - new object process: 32069
[2021-10-04 10:58:05,418]-[export-1] INFO - new object process: 32070
[2021-10-04 10:58:05,622]-[export-1] INFO - new object process: 32071

Если обратить внимание на время добавления объектов, то видно что они добавляются партиями по 10 штук буквально за 1-2 тысячные секунды, но при этом перерыв после добавления 10 записей составляет 0.2-0.5 секунд. Изначально я думал что это из-за стандартной емкости листа в 10 элементов. Так что лист проинициализирован сразу на 200000 емкости.
List<exportObject> objects = new ArrayList<>(200000);
        int i = 0;
        while (resultSet.next()) {
            log.info("new object process: {}", ++i);
            Integer lvl = resultSet.getInt("lvl");
            String objectId = resultSet.getString("object_id");
            int orderNumber = resultSet.getInt("order_number");
            objects.add(new exportObject(lvl, objectId, orderNumber));
        }

В чем причина этой задержки между каждыми 10 элементами?
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
@Shiftuia
Java-программист
Может быть драйвер БД сразу затягивает из ResultSet 10 следующих объектов, если они есть. Когда они заканчиваются, то драйвер снова идет в БД за новыми данными
Что-то типа этого https://docs.oracle.com/cd/E11882_01/java.112/e165...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы