Проблема с сборкой мусора с помощью Data Matax Objetcs - PullRequest
0 голосов
/ 04 февраля 2020

Может кто-нибудь помочь, пожалуйста? Сборщик мусора не собирает эти объекты сопоставления, и свободное место в куче не уменьшается.

com.datastax.driver.mapping.Mapper Объекты класса создаются в памяти кучи. Я дал код, где мы используем маппер, это только место во всем приложении.

enter image description here

Код:

public RawPlan retrievePrePPlan(PlanCompleteTrigger planCompleteTrigger) {
        Mapper<PrePPlan> mapper = new MappingManager(session).mapper(PrePPlan.class);

        //TODO Replace Select all with individual column names
        Select select = QueryBuilder.select().all().from(CassandraTableConstants.PRE_P_PLAN);
        select.where(QueryBuilder.eq("runuuid", planCompleteTrigger.getRunUUID()))
                .and(QueryBuilder.eq("groupid", planCompleteTrigger.getGroupId()))
                .and(QueryBuilder.eq("itemnbr", planCompleteTrigger.getItemNumber()))
                .and(QueryBuilder.eq("sl", planCompleteTrigger.getSL()));

        ResultSet resultSet = session.execute(select);
        Result<PrePPlan> prePPlans = mapper.map(resultSet);
        return new RawPlan(prePPlans.all());
    }

1 Ответ

1 голос
/ 04 февраля 2020

Вы неправильно используете Object Mapper - вы используете его только для отображения строк в POJO. У вас есть следующая проблема - вы создаете отдельные запросы CQL с использованием QueryBuilder, и это приводит к следующей проблеме - Cassandra необходимо получать и анализировать каждый оператор CQL отдельно - это значительно снижает производительность. Вы можете построить запрос с заполнителями, подготовить его и , а затем связать параметры - это должно быть намного быстрее.

Но в действительности вам просто нужно использовать объект правильно отображать - если у вас уже есть экземпляр Mapper, тогда вы можете выбрать:

  1. Использовать mapper.get и другие операции CRUD , если у вас полный первичный ключ
  2. Используйте аксессоры , если ваш запрос может возвращать несколько результатов или вам нужен пользовательский запрос.

Это облегчит вашу жизнь, так как вы этого не сделаете нужно построить запрос - объект-маппер будет делать все под капотом на основе аннотаций POJO, а затем оптимизировать выполнение запроса, подготовив его, и т. д. c.

...