假设我有课
Box(double xi, double yi, double zi, double xf, double yf, double zf)
我有一个方法
Box#collides(Box other){
if(other.xf < xi || other.xi > xf) return false;
if(other.yf < yi || other.yi > yf) return false;
return other.zf >= zi && other.zi <= zf;
}
然后我得到两个盒子。我比较第一个
Box(a,b,c,d,e,f)
将.collides()
移至另一个框中,
Box(A,B,C,D,E,F)
是否仍会创建Box对象?还是JVM会很聪明,并使用类似于
static collides(double xi, double yi, double zi, double xf, double yf, double zf, double xi, double oyi, double ozi, double oxf, double oyf, double ozf){
if(oxf < xi || oxi > xf) return false;
if(oyf < yi || oyi > yf) return false;
return ozf >= zi && ozi <= zf;
}
这似乎是微优化,但就我而言,可能实例化了数百万个Box
。
答案 0 :(得分:1)
它可能会或可能不会发生。 HotSpot JVM可以这样做,但是仅当所有内容都通过一种方法内联时(除了通过内联转换为过程间的优化之外,没有过程内优化)。
它必须在一个过程中(内联之后)查看while分配,测试和运行范围外。这很可能会发生,但不能保证。但是,几百万个盒子意味着大约60兆字节的数量,这是很多倍,但是每秒分配几MB的情况却很常见。
如果要确定,请提供类似Box#collides(double xi, double yi, double zi, double xf, double yf, double zf)
的方法。