Мне было интересно, как это повлияет на производительность и использование памяти при использовании примитивов по сравнению с не примитивными типами данных в Drools.
В документации указано:
8.8.6. Замечание об автобоксах и примитивных типах Drools пытается сохранить числа в их примитивной или объектной оболочке, поэтому
переменная, привязанная к примитиву int, когда используется в блоке кода или
выражение больше не будет нуждаться в ручной распаковке; в отличие от Drools 3.0
где все примитивы были автоматически упакованы, что требует ручной распаковки.
переменная, связанная с оберткой объекта, останется как объект;
существующие правила JDK 1.5 и JDK 5 для обработки автобокса и распаковки
применить в этом случае. При оценке ограничений поля система
пытается привести одно из значений в сопоставимый формат; так
Примитив сравним с обёрткой объекта.
По сути, в моих правилах есть такие условия:
$someObj : SomeObj( someIntOrIntegerField > 15 )
и накопления следующим образом:
$total : Double() from accumulate (
SomeObj(
$someIntOrIntegerField : someIntOrIntegerField) over window:time( 1h ),
sum( $someIntOrIntegerField ) )
Что я понимаю, так это то, что Drools делегирует принуждение в JVM и не выполняет никакой упаковки / распаковки. Это правда? Поскольку я участвую в гонке со временем за пару миллисекунд, мне было интересно, что будет быстрее:
int someIntOrIntegerField;
или
Integer someIntOrIntegerField;
Обратите внимание, что мой вопрос о том, есть ли бокс / распаковка, о которой я не знаю в Drools, и о том, будут ли примитивы или Object
s быстрее и эффективнее (с точки зрения памяти), опять же, ограничены Drools , В противном случае, хороший ответ в общем объеме Java: https://softwareengineering.stackexchange.com/a/203971