Мне нужно сравнить данные двух List
с на основе двух полей и, если данные совпадают, добавить их в другой список.
Правило, которое я написал, работает нормально, но когда я пытаюсь проверить его на большее количество записей (скажем, 10000 записей), оно выдает GC Out of Memory error
.
Для этого я добавляю оба списка (факта) в рабочую память. Код для добавления приведен ниже:
// insert List 1
list1.stream().forEach(p -> kieSession.insert(p));
// insert List 2
list2.stream().forEach(p ->kieSession.insert(p));
Оба этих списка имеют одинаковые поля. Теперь мне нужно проверить, совпадают ли данные полей field1 и field2 list1 с данными list2. Код написанного мной правила выглядит следующим образом:
rule "To check list1 and list2"
salience 5
no-loop true
when
list1: List1($field1:field1,$field2:field2)
list2: List2($field1List2:field1,$field2List2:field2)
eval($field1List2==$field1&&$field2List2==$field2)
then
globalList.add(list2);
retract(list1);
retract(list2);
end
Я не могу выяснить причину GC out of memory
.
Я делаю что-то не так с Правилами или мне нужно увеличить память JVM?
В настоящее время память JVM равна -Xms2048m
.