【发布时间】:2012-03-09 04:24:00
【问题描述】:
我很好奇。如果我创建了一些局部变量,它们仅用作其他变量的别名(也就是说,一个新的“别名”变量只是简单地分配了一些其他变量的值,而别名的赋值永远不会改变),JVM 是否通过以下方式优化它直接使用原始变量?
例如,假设我正在编写一个(不可变的)四元数类(quaternion 是一个具有四个值的向量)。我编写了一个multiply() 方法,它采用另一个Quaternion,将两者相乘,然后返回结果Quaternion。为了节省打字和提高可读性,我在执行实际计算之前创建了几个别名:
public class Quaternion {
private double[] qValues;
public Quaternion(double q0, double q1, double q2, double q3) {
qValues = new double[] {q0, q1, q2, q3};
}
// ...snip...
public Quaternion multiply(Quaternion other) {
double a1 = qValues[0],
b1 = qValues[1],
c1 = qValues[2],
d1 = qValues[3],
a2 = other.qValues[0],
b2 = other.qValues[1],
c2 = other.qValues[2],
d2 = other.qValues[3];
return new Quaternion(
a1*a2 - b1*b2 - c1*c2 - d1*d2,
a1*b2 + b1*a2 + c1*d2 - d1*c2,
a1*c2 - b1*d2 + c1*a2 + d1*b2,
a1*d2 + b1*c2 - c1*b2 + d1*a2
);
}
}
那么,在这种情况下,JVM 是否会取消a1、b1 等,而直接使用qValues[n] 和other.qValues[n]?
【问题讨论】:
标签: java variables optimization jvm