提问人:elvis 提问时间:10/29/2023 更新时间:10/29/2023 访问量:43
在编译时或运行时,Java 中的常量何时在内存中分配空间?
When exactly is the space allocated in memory for a constant in Java at compile-time or runtime?
问:
我正在学习 Java 常量,我想知道内存中为常量分配的空间究竟是什么时候。是在编译时还是在运行时?例如,我有一个这样的常量:
public static final int NUMBER = 5;
我知道,对于实例或类变量,空间是在运行时在内存中分配的,对于实例变量,空间是在创建对象时在内存中分配的,而对于类变量,空间是在加载类时分配的。但是,对于一个常数来说,发生了什么?我知道编译器在找到这个常量并用其值替换代码中所有位置的每个常量名称时会进行一些优化。但是,内存中为这个常量 NUMBER 分配的空间究竟是什么时候分配的呢?在编译时还是在运行时?
答:
0赞
etienneZink
10/29/2023
#1
内存分配永远不会在编译时发生,因为编译只生成字节码,并且永远不会为运行时分配任何内存。编译时的内存分配将导致内存泄漏。你永远不知道什么时候释放内存(停止问题/我会再次使用它吗?也许你的意思是:在编译时,编译器用“常量”的文字/值替换(如你所说)你的标识符。
评论