执行施法操作Vs i ++有多贵?

Rob*_*ino 6 java casting

在Java中,执行转换的成本是多少:

(MyObject) IObject;
Run Code Online (Sandbox Code Playgroud)

与:

i++;
Run Code Online (Sandbox Code Playgroud)

假设它前面有"int i = N".

编辑:

如果你愿意,请忽略我与(i ++)的直接比较.让我用更一般的术语来说明这一点:一般来说铸造有多贵?比我天真的"i ++"示例更好地选择您的参考操作,例如,采用简单的变量声明和赋值,如何执行转换与VM字节码/操作相比较?

我用i ++作为测量棒.这是一个非常糟糕的主意.当他们选择"米"作为基线时,他们做得更好.Java中有运营成本的基础测量单位吗?一个JVM操作系统?我想这将取决于Java操作系统编译的原生代码...... awyay,铸造有多贵?(你为我挑选测量棒,我很擅长)

bes*_*sss 1

我将在第二部分做一个简短的回答(选角有多贵):

铸造非常便宜,并且在重要的地方进行了大量优化。 if (o instanceof Clazz) ((Clazz)o)是完全免费的(演员,而不是检查本身)。

总的来说,如果编译器可以证明转换并且常量折叠,那么它不会花费任何成本。否则,需要加载对象的标头来确定类。有些JVM可以使用指针的某些位来存储类,可见它是多么重要。无论如何,即使是负载也可能很便宜并且会到达 L1 缓存。实际上,所有强制转换分支都由硬件正确预测 - 想象一下获得 ClassCastException 的可能性有多大(缓慢的路径 - 在这种情况下优化并不重要)。

由于多种原因,数组通常比集合框架及其泛型快得多,但转换本身只发挥很小的作用。

最后:公然的“测量”,即微基准测试通常是一个令人震惊的想法,测量整个应用程序的性能才是正确的方法。微基准测试需要深入了解 JVM 如何优化(或不优化),并且您必须确保对实际需要的内容进行基准测试。总的来说,它本身就是一门艺术。