How/why Java 中的整数缓存速度更快吗?
How/why is Integer caching faster in Java?
根据 Java 语言规范,section 5.1.7、Java 缓存 Integer
从 -128 到 127 以进行性能优化。
因此,当您将 a == b
与缓存范围内的 a
和 b
整数进行比较时,它 returns 为真,即使它们是不同的对象。
从机制上讲,此缓存会带来哪些性能优势?根据 this 的回答,"The purpose is mainly to save memory, which also leads to faster code due to better cache efficiency." 它如何导致更快的代码?我如何使用此功能来提高我编写的实际代码的性能?
是否与IntegerCache
class中的以下方法有关?
public static Integer valueOf(int i) {
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
性能优势与 ==
无关。真正的原因是当相同的 "small" 整数被重复装箱时,缓存允许 valueOf
避免创建大量对象。 Integer
个对象占用 space(至少 16 个字节)。创建大量垃圾意味着垃圾收集器需要更频繁地运行。
我的理解是 Java 团队对实际应用程序进行了大量分析,得出的结论是 Integer
缓存是值得优化的。
(我之所以说它与 ==
无关,是因为你不能 依赖 ==
为 Integer
工作对象。因此,执行此操作的任何代码......同时还不能确保整数在指定范围内......是错误的。如果你进行范围检查以确保数字在范围内,你可能会花在上面的钱比你用 ==
节省的钱还多。)
"... which also leads to faster code due to better cache efficiency." How does it lead to faster code?
他们所说的缓存效率是大多数现代处理器用来处理CPU和内存速度不匹配的硬件级内存缓存。如果应用程序只有一个 Integer
对象代表数字 1
并且该数字经常出现,那么保存 1
对象的内存地址在(内存)缓存中的机会就会增加.缓存命中意味着更快的代码。
Does it have anything to do with the following method found in the IntegerCache class?
呃……是的。
根据 Java 语言规范,section 5.1.7、Java 缓存 Integer
从 -128 到 127 以进行性能优化。
因此,当您将 a == b
与缓存范围内的 a
和 b
整数进行比较时,它 returns 为真,即使它们是不同的对象。
从机制上讲,此缓存会带来哪些性能优势?根据 this 的回答,"The purpose is mainly to save memory, which also leads to faster code due to better cache efficiency." 它如何导致更快的代码?我如何使用此功能来提高我编写的实际代码的性能?
是否与IntegerCache
class中的以下方法有关?
public static Integer valueOf(int i) {
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
性能优势与 ==
无关。真正的原因是当相同的 "small" 整数被重复装箱时,缓存允许 valueOf
避免创建大量对象。 Integer
个对象占用 space(至少 16 个字节)。创建大量垃圾意味着垃圾收集器需要更频繁地运行。
我的理解是 Java 团队对实际应用程序进行了大量分析,得出的结论是 Integer
缓存是值得优化的。
(我之所以说它与 ==
无关,是因为你不能 依赖 ==
为 Integer
工作对象。因此,执行此操作的任何代码......同时还不能确保整数在指定范围内......是错误的。如果你进行范围检查以确保数字在范围内,你可能会花在上面的钱比你用 ==
节省的钱还多。)
"... which also leads to faster code due to better cache efficiency." How does it lead to faster code?
他们所说的缓存效率是大多数现代处理器用来处理CPU和内存速度不匹配的硬件级内存缓存。如果应用程序只有一个 Integer
对象代表数字 1
并且该数字经常出现,那么保存 1
对象的内存地址在(内存)缓存中的机会就会增加.缓存命中意味着更快的代码。
Does it have anything to do with the following method found in the IntegerCache class?
呃……是的。