从5版开始,泛型一直在Java中.在Java应用程序中使用泛型有什么性能影响,你能解释它们对性能影响的原因吗?
Pet*_*rey 25
泛型是一个编译时功能.它在运行您的应用程序时几乎没有任何影响.
像大多数表演问题; 编写清晰简单的代码更为重要,这通常会带来非常好的性能.
出于性能原因改变设计通常是一个错误,有些人说你永远不应该这样做.我认为在你开始之前考虑性能是值得的,但你必须认识到你有一个相对微不足道的性能问题.
当您更好地了解应用程序的行为时,最好先编写代码并稍后对其进行优化.即当你是真正的用例和分析器.
aio*_*obe 12
它是否会影响应用程序的性能以及如何?
不,它不会影响性能,因为它在运行时甚至不存在.
从正式线索:
当实例化泛型类型时,编译器通过称为类型擦除的技术来转换这些类型 - 这是一种编译器删除与类型参数相关的所有信息并在类或方法中键入参数的过程.
import java.util.*;
class Test {
public static void main(String[] args) {
List<String> l = new ArrayList<String>();
l.add("hello");
System.out.println(l.get(0).length());
}
}
Run Code Online (Sandbox Code Playgroud)
import java.util.*;
class Test2 {
public static void main(String[] args) {
List l = new ArrayList();
l.add("hello");
System.out.println(((String) l.get(0)).length());
}
}
Run Code Online (Sandbox Code Playgroud)
是的,它确实会影响性能,因为编译器会创建类型转换.
例如:
List<String> strings = ...
String first = strings.get(0);
Run Code Online (Sandbox Code Playgroud)
会变成:
List strings;
String first = (String)string.get(0);
Run Code Online (Sandbox Code Playgroud)
然而,这并不重要,因为在Java具有泛型之前,这是以相同的方式解决的.在Java泛型中,仅在编译时确保类型安全.