Java Object []强制转换为[] []性能问题?

时间:2011-01-04 19:06:03

标签: java arrays performance casting

您好我很好奇执行以下类型的演员会有什么严重的表现后果吗?特别是当它的表现数百万次感谢

Object [] car = new Object[1];

car[0] = new Long[2][2];

long[][] values = (long[][]) car[0]; 

6 个答案:

答案 0 :(得分:3)

Casting确实不是一个性能问题。这只是编译器知道如何处理对象的元数据。当然,如果它试图将对象用作错误的类型,那么你将获得ClassCastException,这可能会导致性能问题。

答案 1 :(得分:0)

我会说性能问题是那种情况完全没有任何意义。你为什么要那样做?

答案 2 :(得分:0)

您编写的代码将导致类强制转换异常。抛出数百万个类强制转换异常可能会很慢。它也不太可能是预期的逻辑。

答案 3 :(得分:0)

强制转换的影响取决于你的jvm及其使用的代码。在现代jvms中应该高度优化强制转换操作,因为它经常用于泛型类,因此其开销应该非常低。

如果您的代码必须快速,您应该对其进行分析以找到瓶颈,如果演员在您的特定情况下出现问题,这也会回答。

答案 4 :(得分:0)

你无法进行以下演员表演。我建议你从一开始就让数组长[] [],你不需要转换数组类型。

// these won't work as these are different types of references. 
long[] longs = (long[]) new Long[0];
long[][] longs = (long[][]) new Long[0][];

转换它们的唯一方法是迭代它们。

Long[][] longs = ...
long[][] longs2 = new long[longs.length][];
for(int i=0;i<longs.length;i++) {
  longs2[i] = new long[longs[i].length];
  for(int j=0;j<longs[i].length;j++) longs2[i][j] = longs[i][j];
}

主要的性能成本是首先创建Long [] [],因为你必须创建许多对象,而使用long [] []你只有数组使得结构对内存和cpu更有效。

答案 5 :(得分:0)

如果热点可以证明Object实际上很长[] [],则成本为none,否则需要检查+分支预测,这通常是成功的,并且它是一个额外的(只有一个)cpu周期。

投射完全免费,就像其中一个答案所暗示的那样,它不仅仅是元数据。