Ber*_*sta 48 java optimization jvm
可能重复:
奇怪的Java拳击
最近我看到了一个演示文稿,其中有以下Java代码示例:
Integer a = 1000, b = 1000;
System.out.println(a == b); // false
Integer c = 100, d = 100;
System.out.println(c == d); // true
Run Code Online (Sandbox Code Playgroud)
现在我有点困惑.我理解为什么在第一种情况下结果是"假" - 这是因为Integer是一个引用类型,而"a"和"b"的引用是不同的.
但为什么在第二种情况下结果是"真实的"?
我听说过一个观点,即JVM将对象的int值从-128缓存到127以进行某些优化.以这种方式,"c"和"d"的引用是相同的.
有人可以给我更多关于这种行为的信息吗?我想了解这种优化的目的.在什么情况下性能提高等等.参考这个问题的一些研究将是伟大的.
Mic*_*rdt 52
我想了解这种优化的目的.在什么情况下性能提高等等.参考这个问题的一些研究将是伟大的.
目的主要是节省内存,由于更好的缓存效率,这也可以带来更快的代码.
基本上,Integer
该类保留了Integer
-128到127范围内的实例缓存,并且所有自动装箱,文字和用法Integer.valueOf()
都将从该缓存中返回其覆盖范围的实例.
这是基于这样的假设,即这些小值比其他整数更频繁地出现,因此避免为每个实例使用不同对象的开销是有意义的(Integer
对象占用12个字节之类的东西).
dty*_*dty 10
看看执行情况Integer.valueOf(int)
.Integer
对于小于的输入,它将返回相同的对象256
.
编辑:
它实际上是-128
要+127
在默认情况下,如下所述.
归档时间: |
|
查看次数: |
20843 次 |
最近记录: |