Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java对变量的访问时间_Java_Compiler Optimization - Fatal编程技术网

java对变量的访问时间

java对变量的访问时间,java,compiler-optimization,Java,Compiler Optimization,假设我们有一个包含1000个字符串常量的类Const.java: public static final String foo1 = "foo1"; public static final String foo2 = "foo2"; ... public static final String foo1000 = "foo1000"; 现在,执行另一个类中的某个方法 String s = Const.foo1000; 变量的访问时间是否取决于此类变量的数量? (也就是说,如果Const.ja

假设我们有一个包含1000个字符串常量的类
Const.java

public static final String foo1 = "foo1";
public static final String foo2 = "foo2";
...
public static final String foo1000 = "foo1000";
现在,执行另一个类中的某个方法

String s = Const.foo1000;
变量的访问时间是否取决于此类变量的数量?
(也就是说,如果
Const.java
中有1000000个字符串,那么代码会以相同的速度运行吗?

访问时间将始终相同

当应用程序启动时,使用类加载器将类加载到RAM内存中。常量(static/final)存储在一个内存位置,无论在哪里使用,在编译时都会在代码中被替换

您应该注意的唯一区别是在应用程序的开始时间,这将与您在类中拥有的变量数量成比例


访问内存位置总是O(1),就像从HashMap检索对象一样。

是的,它将以相同的速度运行。一个重要原因是这些常量都是在编译时解析的,而不是在运行时解析的

编译代码时,将分析仅由文字组成的任何静态最终字段,或仅由文字组成的其他静态最终字段的值。事实上,如果要反编译该分配,您将看到:

String s = "foo1000";   // No reference whatsoever to Const

这适用于所有带有常量初始值设定项的
final
变量,不需要
静态
字段。不可能在
Const.java
中声明1000000个字符串常量。技术最大值小于33000。但对性能的影响完全为零,正如;如果类
Const
仅包含这些声明,则它甚至不会在运行时加载。