【发布时间】:2013-08-11 19:10:27
【问题描述】:
像这样的未使用的导入 - import android.widget.RelativeLayout; 会吃掉内存吗? 只是想知道它有多少或只是有价值? 也许这是个愚蠢的问题,但我还没有找到答案。
【问题讨论】:
标签: java performance import
像这样的未使用的导入 - import android.widget.RelativeLayout; 会吃掉内存吗? 只是想知道它有多少或只是有价值? 也许这是个愚蠢的问题,但我还没有找到答案。
【问题讨论】:
标签: java performance import
不,它们不会占用任何内存。导入只是被编译器用来在编译时解析类名。
编译器将每个类名更改为完全限定名。并删除导入语句。所以,import 语句不会变成字节码。
通配符导入的唯一问题是命名空间冲突,即,当在两个不同的包中定义了两个具有相同名称的类型时,使用通配符导入这些包将导致所使用的类型的名称冲突。
要查看编译器如何替换导入语句,您可以使用javap 命令生成类的字节码。考虑下面的代码:
import java.util.*;
import java.util.regex.*;
public class Test {
public static void main(String[] args) {
}
}
只需编译上述代码,并使用以下命令检查字节码:
javap Test
它给出以下输出:
public class Test {
public Test();
public static void main(java.lang.String[]);
}
因此,您可以看到String 类型被替换为它的完全限定名称java.lang.String,并且字节码中没有导入语句。
【讨论】:
未使用的导入在运行时不会产生影响(因为字节码中没有导入)。但是,未使用的导入会影响编译器,但影响不大。
一般来说,只导入您需要的内容会提高代码的可维护性和可读性。
【讨论】:
不,编译器会在编译后删除它们。但是你可能会遇到两个问题
【讨论】:
在运行时没有影响。它可以使编译过程变得非常慢(无法测量)。但就拥有它们而言,最好删除它们,因为它会使文件更小,并且更容易阅读实际使用的导入。
【讨论】:
不会影响任何 rumtime 编译器时间,
但最好的方法是尽可能编写最清晰、最简单的代码,因为这样可以提高代码的可维护性,并有助于确保代码即使在更改后也能正常运行。
【讨论】: