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
,并根据需要导入它们。 提高了代码的可读性。