dfe*_*r88 16 java micro-optimization
在循环中声明一个变量是不好的做法?在我看来,这样做,如下面的第一个代码块所示,将使用十倍的内存作为第二个...由于在循环的每次迭代中创建一个新的字符串.它是否正确?
for (int i = 0; i < 10; i++) {
String str = "Some string";
}
Run Code Online (Sandbox Code Playgroud)
与
String str;
for (int i = 0; i < 10; i++) {
str = "Some String";
}
Run Code Online (Sandbox Code Playgroud)
Jas*_*n S 26
在循环中声明一个变量是不好的做法?
一点也不!它将变量本地化为其使用点.
在我看来,这样做,如下面的第一个代码块所示,将使用十倍的内存作为第二个
编译器可以优化事物以保持内存使用效率.仅供参考:如果您使用final
关键字告诉它您的变量具有对象的固定引用,您可以提供帮助.
注意:如果你有一个更复杂的对象,你在构造函数中执行复杂的代码,那么你可能需要担心单次执行和多次执行,并在循环之外声明对象.
在这两个示例中,您将实例化一个包含字符串"Some String"的新字符串对象,次数相同.
在str
循环内部声明的第一个示例中,在for循环完成后,对该字符串的所有引用都将丢失,从而允许Java的垃圾收集器从内存中删除所有字符串实例.但是,在您str
在循环外部声明的第二个示例中,您创建的最后一个字符串仍将在循环外部引用它,而Java的垃圾收集器将仅从实例化的内存中删除10个字符串中的9个.
因此,第一种方法更好,因为您没有保留字符串的任何引用,干扰垃圾收集器确定它是否仍在使用的能力.
归档时间: |
|
查看次数: |
14195 次 |
最近记录: |