[英]Performance accessing static final
我有一个静态10K文件,每行都有一个单词。 我需要创建一个包含所有单词的String []数组。 我有2个选择:
现在,我的问题是,在完成所有这些之后,从数组1中获取一个单词(注意最终关键字)明显快于数组2中的单词(没有final关键字,因为我们在运行时加载单词)。 从理论上讲它有所作为吗? 我们在这里谈论的是Android,而不是Java。 但我对这两种情况都很感兴趣。
通用Java:
JVM中没有用于数组初始化的字节码,因此编译器最终会为每个数组项生成单独的赋值语句,这会使代码膨胀。 有关更多信息,请参见此处
考虑到您拥有的数据量,从文件加载值是最有效的方案。 数组是否被声明为final是无关紧要的,因为字符串本身是不可变的。
安卓:
DVM通过添加初始化数组的指令改进了JVM。 所以你没有相同的代码膨胀问题。
也就是说,从文件加载东西可能是最灵活的方法。 如果正确完成,您可以根据需要从多个文件加载值,甚至可以在Internet上加载。
我认为没有明显的区别。 当你访问它们时,它们中的两个将只是2个String数组,所以......
我相信如果你在构造函数中分配关键字,你可以将关键字标记为static或final。 因此,请确保您在静态类的构造函数中读取该文件。 (我不是100%确定Java有静态构造函数,但在C#中它可以工作,而且两者通常非常相似)。
即使你不能做到这一点,我仍然会阅读10k文件。 读取字符串[]永远不会真的很贵。 编译器通常会对标记为final的成员执行的任何优化技巧都可以在Java JITTER运行时在注意到字符串[]永远不再更改时完成。
最终制作阵列不会使其元素成为最终。 与C ++相比,这是Java的缺点之一。 唯一的实际效果是优化器和混淆器。 根据你的描述,我很确定没有明显的区别。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.