Java JVM是否删除了不必要的类实例化?
假设我有一节课Java JVM是否删除了不必要的类实例化?,java,optimization,jvm,Java,Optimization,Jvm,假设我有一节课 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 &g
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;
}
使用.collide()
到另一个框
Box(A,B,C,D,E,F)
是否仍将创建长方体对象?或者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;
}
<代码>静态碰撞(双席、双益、双子、双XF、双YF、双ZF、双席、双OYI、双OZI、双OXF、双OYF、双OZF){
如果(OXF<席氏Oxi-xf)返回假;
如果(oyf返回ozf>=zi&&ozi这可能发生,也可能不发生。HotSpot JVM可以这样做,但只有当所有内容都在单个方法中内联时(除了通过内联转换为过程间优化之外,没有过程内优化) 它必须在单个过程中(内联后)看到while分配、测试和超出范围。这很可能发生,但不能保证。然而,几百万个框意味着大约60兆字节的几倍,这是很多,但每秒分配几兆字节是很常见的
如果你想确定,提供一个方法,比如“代码>盒子β碰撞”(双席,双彝,双子,双XF,双YF,双ZF)
您问的是是否有两个box对象,它们是否会消失并创建一个新方法?我问的是JVM是否不必创建box对象,而是使用类似于我提供的静态方法。请参阅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;
}