Java 效率;“预铸”;vs每次都是铸造
有时,您需要基于Java 效率;“预铸”;vs每次都是铸造,java,performance,casting,Java,Performance,Casting,有时,您需要基于instanceof进行分支,然后对具体类型执行一些操作 if (obj instanceof IonObject) { Ion.assertRegistered((IonObject) obj); writeMark(((IonObject) obj).getIonMark()); ((IonObject) obj).save(this); return; } 在这种情况下,生成所需类型的局部变量会使代码更高效,还是仅仅是视觉上的改进 i
instanceof
进行分支,然后对具体类型执行一些操作
if (obj instanceof IonObject) {
Ion.assertRegistered((IonObject) obj);
writeMark(((IonObject) obj).getIonMark());
((IonObject) obj).save(this);
return;
}
在这种情况下,生成所需类型的局部变量会使代码更高效,还是仅仅是视觉上的改进
if (obj instanceof IonObject) {
// cache the casted value
IonObject iobj = (IonObject) obj;
Ion.assertRegistered(iobj);
writeMark(iobj.getIonMark());
iobj.save(this);
return;
}
铸造成本很低,因为它必须检查类型是否合适(否则实际上不会改变任何东西) 但是,在这种情况下,您可以假设JIT将优化此检查,以便在您编写代码的任何一种方式中完成一次
如果代码没有足够的运行时间进行JIT处理(这很可能),那么代码会稍微慢一点,但这并不重要,因为调用不够。i、 e.JIT与非JIT之间的性能差异要大得多。铸造成本很小,因为它必须检查类型是否合适(否则实际上不会改变任何东西) 但是,在这种情况下,您可以假设JIT将优化此检查,以便在您编写代码的任何一种方式中完成一次
如果代码没有足够的运行时间进行JIT处理(这很可能),那么代码会稍微慢一点,但这并不重要,因为调用不够。i、 e.JIT与非JIT之间的性能差异要大得多。铸造成本很小,因为它必须检查类型是否合适(否则实际上不会改变任何东西) 但是,在这种情况下,您可以假设JIT将优化此检查,以便在您编写代码的任何一种方式中完成一次
如果代码没有足够的运行时间进行JIT处理(这很可能),那么代码会稍微慢一点,但这并不重要,因为调用不够。i、 e.JIT与非JIT之间的性能差异要大得多。铸造成本很小,因为它必须检查类型是否合适(否则实际上不会改变任何东西) 但是,在这种情况下,您可以假设JIT将优化此检查,以便在您编写代码的任何一种方式中完成一次
如果代码没有足够的运行时间进行JIT处理(这很可能),那么代码会稍微慢一点,但这并不重要,因为调用不够。i、 e.JIT与非JIT之间的性能差异要大得多。它简化了代码的可读性和可维护性,仅此而已。因此,在运行时强制转换不需要花费任何成本?您是否运行了探查器来查看?我想编译器可能会对此进行优化,但如果不运行一些测试,我无法确定。强制转换非常便宜,JIT(即时编译器)无论如何都会优化类似的东西。本例中的所有内容都与可读性有关。为什么选择第一个代码段?它的可读性较差,并且会进行冗余的强制转换。它简化了代码的可读性和可维护性,仅此而已。所以强制转换在运行时不会花费任何费用?您运行过探查器来查看吗?我想编译器可能会对此进行优化,但如果不运行一些测试,我无法确定。强制转换非常便宜,JIT(即时编译器)无论如何都会优化类似的东西。本例中的所有内容都与可读性有关。为什么选择第一个代码段?它的可读性较差,并且会进行冗余的强制转换。它简化了代码的可读性和可维护性,仅此而已。所以强制转换在运行时不会花费任何费用?您运行过探查器来查看吗?我想编译器可能会对此进行优化,但如果不运行一些测试,我无法确定。强制转换非常便宜,JIT(即时编译器)无论如何都会优化类似的东西。本例中的所有内容都与可读性有关。为什么选择第一个代码段?它的可读性较差,并且会进行冗余的强制转换。它简化了代码的可读性和可维护性,仅此而已。所以强制转换在运行时不会花费任何费用?您运行过探查器来查看吗?我想编译器可能会对此进行优化,但如果不运行一些测试,我无法确定。强制转换非常便宜,JIT(即时编译器)无论如何都会优化类似的东西。本例中的所有内容都与可读性有关。为什么选择第一个代码段?它的可读性较差,并且执行冗余强制转换。