Java导入与代码性能

我想知道如果我在我的java程序中包含很多import ,会影响我的代码的性能(例如,程序会更慢)? Java中import的逻辑与C中include的相同吗?

会影响我的代码的性能(例如,程序会更慢)?

不,它不会影响你的代码的性能。

二进制文件(类文件)的大小没有增加,因为导入不是用任何剪切和粘贴机制来实现的。

这只是一个避免必须写的句法糖

 java.util.List<java.math.BigInteger> myList = new java.util.ArrayList<java.math.BigInteger>(); 

这是一个小testing,certificate这一点:

 aioobe@e6510:~/tmp$ cat Test.java import java.util.*; public class Test { public static void main(String[] args) { List<Integer> myInts = new ArrayList<Integer>(); } } aioobe@e6510:~/tmp$ javac Test.java aioobe@e6510:~/tmp$ md5sum Test.class 523036e294b17377b4078ea1cb8e7940 Test.class 

(修改Test.java

 aioobe@e6510:~/tmp$ cat Test.java public class Test { public static void main(String[] args) { java.util.List<Integer> myInts = new java.util.ArrayList<Integer>(); } } aioobe@e6510:~/tmp$ javac Test.java aioobe@e6510:~/tmp$ md5sum Test.class 523036e294b17377b4078ea1cb8e7940 Test.class 

Java中导入的逻辑与C中包含的相同吗?

不, #include是一个预处理器指令,用剪切 – 粘贴机制来实现。

…会影响我的代码的性能

丝毫不在。 事实上,编译的类(使用导入或不导入)将是相同的。 导入只是语法糖,它允许您在源代码中使用较短的名称作为外部类或(使用静态导入)类成员。 换句话说,它允许你写:

  Map map = new HashMap(); 

代替

  java.util.Map map = new java.util.HashMap(); 

就这些。

编译时间可能有一点点(微小的)差异。 但是,AFAIK,就像import java.util.*; 不会导致编译器加载所有java.util类。 相反,它只是将类的名称添加到符号表中。

话说回来:

  • 不必要的import是一个坏主意,因为他们混淆了代码,并可能误导读者阅读代码。
  • 通配符导入( .* )可能会导致意外的冲突。
  • 许多人(包括我自己)不喜欢通配符导入,因为他们喜欢看到实际使用的类的列表。

Java中导入的逻辑与C中包含的相同吗?

不它不是。

AC / C ++ include指令将任意1个 C / C ++“代码”注入到源stream中。 这可以包括声明和可执行语句…这可以影响性能,执行内存占用和可执行文件的大小。


1 – 也就是说,无论包含文件的作者select将其放入文件中。 它可以是简单的方法和类“签名”,但也可以是macros观,代码和其他有影响的声明。 你必须检查文件以确保。

它不会影响程序的运行速度

这可能会影响程序的编译速度

如果你import java.util.*; 它会将所有的java.util包加载到编译器中,这可能会增加编译时间.*整个包只用于一个用途(尽pipe如果这是一个问题,您应该执行一些分析)。

除了潜在的编译时间问题之外,不要忘记考虑可读性问题。 一般来说,我(和我谈过的人)findimport pack.age.Class;import pack.age.*;更具可读性import pack.age.*; – 在做出这个决定之前,先与你的团队谈一谈。

但是它背后的逻辑与#include非常不同,并且不会使代码膨胀。 包含依赖性瓶子可能会导致超出需要,但这可能不是一个大问题。

import不会减慢你的程序。 最好在不同的packages有不同的classes ,并根据需要导入它们。 提高了代码的可读性。