Java - .class 文件中未初始化的静态变量
Java - uninitialized static variable in .class file
在c中,未初始化的静态变量在可执行文件中不带space。
Java呢? static variable
是否在 .class
文件中使用 space?
提示:问题是关于磁盘space,而不是内存。
是的,它们会占用内存。 java 中的所有变量都将分配给它们默认值,即使您没有对其进行初始化也是如此。所以,
int i;
在这种情况下会占用内存。这是一些进一步的阅读:Do uninitialized primitive instance variables use memory?
所有字段在类文件中都有一个条目,给出名称、类型、标志(final、public、volatile、static 等)和其他数据。
想一想,应该是这样吧。 Java 不是 C,其中变量只是 bss 或其他地方的一个位置。您有反射和运行时类型检查,因此必须维护所有这些信息。
如果字段被初始化,类文件中将有额外的数据来进行初始化(ConstantValue 属性或方法中的字节码)。但是,即使是未初始化的字段也必须在类文件中有字段条目。
在c中,未初始化的静态变量在可执行文件中不带space。
Java呢? static variable
是否在 .class
文件中使用 space?
提示:问题是关于磁盘space,而不是内存。
是的,它们会占用内存。 java 中的所有变量都将分配给它们默认值,即使您没有对其进行初始化也是如此。所以,
int i;
在这种情况下会占用内存。这是一些进一步的阅读:Do uninitialized primitive instance variables use memory?
所有字段在类文件中都有一个条目,给出名称、类型、标志(final、public、volatile、static 等)和其他数据。
想一想,应该是这样吧。 Java 不是 C,其中变量只是 bss 或其他地方的一个位置。您有反射和运行时类型检查,因此必须维护所有这些信息。
如果字段被初始化,类文件中将有额外的数据来进行初始化(ConstantValue 属性或方法中的字节码)。但是,即使是未初始化的字段也必须在类文件中有字段条目。