[英]Are Kotlin data types built off primitive or non-primitive Java data types?
[英]Performance of primitive vs. non-primitive data types in Drools
我想知道与在Drools中使用非原始数据类型相比,使用原始数据会对性能和内存使用产生什么影响。
在文档中 ,声明:
8.8.6。 关于自动装箱和基元类型的注意事项Drools尝试将数字保留为它们的基元或对象包装形式,因此,在代码块或表达式中使用绑定到int基元的变量时,不再需要手动拆箱。 与Drools 3.0不同,在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
的速度和效率(就内存而言)是否会更快,更有效(再次限制于Drools)。 否则,在一般的Java范围内会有一个很好的答案: https : //softwareengineering.stackexchange.com/a/203971
您的问题的一部分是可以回答的:
我了解的是Drools将强制委派给JVM,并且不进行任何装箱/拆箱。 这是真的?
不,那不是真的。 JVM不执行自动装箱/拆箱转换。 它是(源->字节码)编译器,负责将对(例如) Integer.valueOf(int)
和Integer.intValue()
调用插入到字节码中的适当点。 您可以通过使用javap
检查“ .class”文件来验证这一点。
对于Drools,编译器会生成“ .class”文件,这些文件在字节码中具有任何必要的自动装箱/拆箱。 我认为您引用的文档实际上意味着Drools编译器的自动装箱/拆箱策略已更改...自Drools 3.0起
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.