就运行时性能而言,在Java中将int转换为short是多么昂贵?可能有成千上万的这样的铸造,因此我想知道它是否会影响性能。感谢。
答案 0 :(得分:6)
没有。它不会影响表演。这是一个简单的操作。 当您想要分析软件的性能时,您最好根据输入的大小关注算法运算的计算成本。
答案 1 :(得分:3)
您可以忽略该演员的费用。你不会注意到成千上万的演员。
答案 2 :(得分:3)
将抛弃的辩论和借口放在一边......
首先,short
是一种特殊的数据类型。 Java并不喜欢short
。 Java实际上非常喜欢int
,因为 JVM堆栈使用32位寄存器。 short
是一个16位数据类型(int
= 32位)。
由于32位结构,每当java向堆栈移动一个short时,它就会自动转换为整数。所以,首先想知道的是,我想在java中使用short
吗?他们确实付出了代价。这就是为什么你很少会在jdk源代码中看到任何short
数据类型用法。
将整数转换为short时,JVM使用 i2s
操作。 具体费用取决于您使用的JVM和硬件。
您可以找到一些统计信息in this paper,但遗憾的是,i2s
未列出。它应该不到20ns。
答案 3 :(得分:1)
我认为安全的做法是在遇到性能问题之前不要担心性能问题。当您确实遇到性能问题时,很可能在大多数业务应用程序中,大多数应用程序的迟缓都可以在与磁盘和/或网络的交互中得到解决。我认为像这样的微优化不太可能对你的表现产生很大的影响。
答案 4 :(得分:1)
你为什么需要这样做?我认为它不会对性能产生太大影响,但请记住您需要的数据类型范围:
int: -2,147,483,648 to 2,147,483,647
short: -32,768 to 32,767
答案 5 :(得分:1)
以下是长期测试,但可以很容易地适应短期。 将int转换为long在这个示例中比仅传入long长约5%。
有趣的是,使用隐式强制转换调用该方法的速度较慢,谢谢你自己动手。
没有演员:PT0.141517096S 随着演员阵容:PT0.148024511S 隐式演员:PT0.159904349S
@Test
public void testPerformance(){
long sum =0L;
long timeCallWithImplicitCast =0;
long timeCallWithLong =0;
long timeCallWithCast =0;
for(int j=0;j<2;j++) {//First run warm-up
timeCallWithCast=0;
timeCallWithLong=0;
timeCallWithImplicitCast=0;
for (int i = 0; i < 10_000_000; i++) {
long s1 = System.nanoTime();
sum += shift(i);//Call with int implicit cast
long e1 = System.nanoTime();
timeCallWithImplicitCast += (e1 - s1);
}
for (int i = 0; i < 10_000_000; i++) {
long s3 = System.nanoTime();
sum += shift((long) i);//Call with cast long
long e3 = System.nanoTime();
timeCallWithCast += (e3 - s3);
}
for (int i = 0; i < 10_000_000; i++) {
long l = (long) i;
long s2 = System.nanoTime();
sum += shift(l);//Call with long
long e2 = System.nanoTime();
timeCallWithLong += (e2 - s2);
}
}
System.out.println("With no cast : "+ Duration.ofNanos(timeCallWithLong));
System.out.println("With cast : "+Duration.ofNanos(timeCallWithCast));
System.out.println("With implicit cast: "+Duration.ofNanos(timeCallWithImplicitCast));
}
protected long shift(long index){
return index << 4;
}
答案 6 :(得分:0)
与从内存加载int或存储短片相比,演员阵容很小。在任何情况下,它们都花费大约2纳秒。如果你做了数以千计的这些将花费几微秒。