JVM是否删除了不必要的类实例?

问题描述 投票:0回答:1

假设我有课

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

假设我有一个Box类(double xi,double yi,double zi,double xf,double yf,double zf),我有一个Box#collides(Box other){{((other.xf xf)返回false; ...

java optimization jvm
1个回答
0
投票

可能会或可能不会发生。 HotSpot JVM可以执行此操作,但是仅当所有内容都通过一种方法内联时(除了通过内联转换为过程间的优化之外,没有过程内优化)。

它必须在单个过程中(内联之后)查看while分配,测试和运行范围外。这很可能会发生,但不能保证。但是,几百万个盒子意味着大约60兆字节的数量,这是很多倍,但是每秒分配几MB的情况却很常见。

© www.soinside.com 2019 - 2024. All rights reserved.