gui*_*eak 6 java optimization static jvm final
我很好奇static finalJVM 如何处理这些字段.我在这里看到了类似的问题,但这不是我想要的.让我们考虑这样的例子:
public class TestClassX {
public final int CODE_A = 132;
public final int CODE_B = 948;
public final int CODE_C = 288;
// some other code
}
public class TestClassY {
public static final int CODE_A = 132;
public static final int CODE_B = 948;
public static final int CODE_C = 288;
// some other code
}
Run Code Online (Sandbox Code Playgroud)
在TestClassX字段中,由于它们是final且无法修改,因此在TestClassX类的所有实例中具有相同的值.当然我不能写,TestClassX.CODE_A但我可以说,这些值实际上对所有实例都是通用的 - 我敢肯定,每个实例都有一个CODE_A带有值的字段132.
在TestClassY我可以使用语法TestClassY.CODE_A,但初看起来,只有开发人员看到"哦,这些值对所有实例都是通用的"更容易.
我的主要问题:
我猜JVM,如果是TestClassX,final每次创建新实例时都不会为字段使用任何额外的内存.可以?JVM是否在这种情况下进行任何优化以及它是什么样的优化?
额外的问题1)我也确信我错过了一些非常重要的东西,这是我怀疑的原因.那是什么?
额外的问题2)顺便说一句.如何在JVM优化之后查看我的Java源代码的样子(以便将来可以使用;))?有没有IDE支持这样的功能?例如IntelliJ?我想简单地看看JVM如何对待我TestClassX和我TestClassY.
-XX:+TrustFinalNonStaticFields(默认情况下是关闭),它告诉JVM优化对这些字段的访问,即将它们视为常量并消除字段负载.-XX:+PrintAssemblyVM选项可以转储JIT编译的代码.| 归档时间: |
|
| 查看次数: |
689 次 |
| 最近记录: |