根据Java语言规范,第5.1.7节,Java将 Integer
的缓存从-128到127进行性能优化。
因此,当您将 a == b
与 a
&进行比较时。 b
缓存范围内的整数,即使它们是不同的对象,它也会返回true。
从机制上讲,这种缓存带来了哪些性能优势?根据这个答案,“目的主要是节省内存,由于更好的缓存效率,这也可以带来更快的代码。 “它如何导致更快的代码?我如何使用此功能来提高我编写的实际代码的性能?


是否与 IntegerCache
class?
public static Integer valueOf(int i){
断言IntegerCache.high> = 127;
 if(i> = IntegerCache.low&& i< = IntegerCache.high)
 return IntegerCache.cache [i +( - IntegerCache.low)];
返回new Integer(i);
}



答案 0 :(得分:7)
性能优势与==
无关。真正的原因是缓存允许valueOf
避免在相同的"小"整数重复加框。 Integer
个对象占用空间(至少16个字节)。创建大量垃圾收集器意味着垃圾收集器需要更频繁地运行。
我的理解是Java团队对实际应用程序进行了大量分析,得出的结论是Integer
缓存是值得优化的。
(我说它与==
无关的原因是你不能<{em>依赖 ==
为Integer
个对象工作。因此,任何执行此操作的代码...还没有确保整数在指定范围内...是错误的。如果您进行范围检查以确保数字在范围内,您可能会花费更多使用==
保存。)
&#34; ...由于更高的缓存效率,这也可以带来更快的代码。&#34;它如何导致更快的代码?
他们所讨论的缓存效率是大多数现代处理器用来处理CPU和内存速度不匹配的硬件级内存缓存。如果应用程序只有一个Integer
对象表示数字1
并且该数字经常出现,那么保存1
对象的内存地址在(内存)缓存中的可能性会增加。缓存命中意味着更快的代码。
是否与IntegerCache类中的以下方法有关?
呃...是的。