Java 与i+相比,执行强制转换操作的成本有多高+;?

Java 与i+相比,执行强制转换操作的成本有多高+;?,java,casting,Java,Casting,在Java中,进行一次强制转换的成本有多高: (MyObject) IObject; 与: i++; 假设前面有“int i=N” 编辑: 如果您愿意的话,请暂时忽略我与(i++)的直接比较。让我用更笼统的话来重新表述一下:一般来说,铸造成本有多高?选择比我天真的“i++”示例更好的引用操作,以简单的变量声明和赋值为例,执行强制转换与VM字节码/操作相比如何 我用I++作为标尺。那是个非常糟糕的主意。当他们选择“米”作为基线时,他们做得更好。Java中是否有运营成本的基本计量单位?JVM操作

在Java中,进行一次强制转换的成本有多高:

(MyObject) IObject;
与:

i++;
假设前面有“int i=N”

编辑:

如果您愿意的话,请暂时忽略我与(i++)的直接比较。让我用更笼统的话来重新表述一下:一般来说,铸造成本有多高?选择比我天真的“i++”示例更好的引用操作,以简单的变量声明和赋值为例,执行强制转换与VM字节码/操作相比如何


我用I++作为标尺。那是个非常糟糕的主意。当他们选择“米”作为基线时,他们做得更好。Java中是否有运营成本的基本计量单位?JVM操作?我想这取决于Java op编译的本机代码。。。安维,铸造有多贵?(你替我选择标尺,我不擅长这个)

我会在第二部分做一个简短的回答(铸造有多贵):

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

总的来说,如果该强制转换可以由编译器验证,并且不需要任何成本。否则,需要在对象的标头中加载以确定类。一些JVM可以使用一些指针来存储类,这取决于它的重要性。不管怎样,即使是一个负载也可能很便宜,并且会命中一级缓存。实际上,所有的强制转换分支都是由硬件正确预测的——想象一下,获得ClassCastException的可能性有多大(慢路径——在这种情况下,优化方面并不重要)

由于许多原因,数组通常比collections framerwork及其泛型快得多,但强制转换本身只起了很小的作用


最后:明目张胆的“测量”,即微基准通常是一个令人震惊的想法,测量整个应用程序的性能是正确的方法。微基准测试需要深入了解JVM是如何优化(或不优化)的,并且必须确保对实际需要的进行基准测试

这两个行动之间有什么联系?你让它听起来像是可以互换的,否则你为什么要比较它们的“成本”?什么?…你想做什么?哇-3.几分钟后。。不是我们最好的时刻。我正试图确定一般来说,与一个琐碎的操作相比,铸造的成本有多高。我们要求提供更多信息,而您却忽略了我们的要求。那你期待什么,为这个投票?哦,不。。。我同意,投票是不可能的!