在Java中,未使用的导入声明是否会占用内存?

时间:2013-08-09 18:53:45

标签: java performance import

一个未使用的导入是这样的 - import android.widget.RelativeLayout; 吃内存吗? 只是想知道它有多少或只是有价值? 也许这是一个愚蠢的问题,但我还没有找到答案。

5 个答案:

答案 0 :(得分:46)

不,他们不记忆。编译器只使用导入来在编译时解析类名。

编译器将每个类名更改为完全限定名。并删除import语句。因此,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,并且字节代码中没有import语句。

答案 1 :(得分:11)

不,编译后编译器会删除它们。但是你可能面临两个问题

  1. code clutter
  2. 如果你从jar导入一些类,后来删除了jar而不是import,那么你可能会遇到编译时错误

答案 2 :(得分:2)

在运行时没有影响。它可以使编译过程变得非常微小(不可测量)。但就拥有它们而言,删除它们会更好,因为它会使文件变小,并且更容易读取实际使用的导入内容。

答案 3 :(得分:1)

未使用的导入在运行时没有影响(因为字节代码中没有导入)。但是,未使用的导入会影响编译器,但不会影响编译器。

通常,仅导入所需内容将提高代码的可维护性和可读性。

答案 4 :(得分:0)

任何朗姆酒编译时间都没有影响

但最好的方法是编写最清晰,最简单的代码,因为这样可以提高代码的可维护性,并有助于确保代码在更改后仍能正常运行。

  

文档: Best Practices for Performance