java访问变量的时间

时间:2017-06-12 16:15:59

标签: java compiler-optimization

假设我们有一个包含1000个String常量的类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中有1,000,000个字符串,代码会以相同的速度运行吗?)

2 个答案:

答案 0 :(得分:2)

访问时间将始终相同。

应用程序启动时,使用类加载器将类加载到RAM内存中。常量(静态/最终)存储在一个内存位置,无论在何处使用,都会在代码中替换。

您应该注意的唯一区别是在申请的开始时间,这将与您在课堂上的变量数量成比例。

访问内存位置始终为O(1),就像从HashMap中检索对象一样。

答案 1 :(得分:2)

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

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

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