Java:最终关键字的内存使用情况?

Det*_*tus 15 java static memory-management final

在类中声明final变量(常量)时,例如:

private static final int MyVar = 255;

如果我有100,000个声明这个类的实例,那么这需要多少内存?

它会将变量链接到类,因此具有1*MyVar内存使用(忽略内部指针),还是会链接到此变量的实例并创建此变量的100,000*MyVar副本?

令人难以置信的快速反应!共识似乎是,如果变量既是静态的又是最终的,那么它将需要1*MyVar.谢谢大家!

Ami*_*hum 19

final关键字无关的存储器使用量,因为它仅意味着你不能改变该变量的值.

但是,由于声明了变量static,因此只有一个这样的变量属于该类而不属于特定实例.

取自这里:

如果声明static了一个字段,那么无论该类最终可以创建多少个实例(可能为零),都只存在该字段的一个化身.甲静态字段,有时被称为一个类变量,当类初始化被体现.未声明为静态的字段(有时称为非静态字段)称为实例变量.每当创建一个新的类实例时,就会为该类或其任何超类中声明的每个实例变量创建一个与该实例关联的新变量.


小智 12

只有1*MyVar内存使用,因为它被声明为static.

  • 不是每个JVM,每个类加载器 - 在使用隔离类加载器的JEE环境中,Thomas(下面)的答案很好,这个类可以多次加载.同样在OSGi中,可以加载同一类的多个版本,或者使用应用程序分区加载处女座等. (3认同)
  • 关于此的一个额外注意事项:这是*每个JVM*,所以如果您的程序有多个进程,这可能不适用. (2认同)