Java 集合框架的动态强制转换效应
案例A:Java 集合框架的动态强制转换效应,java,performance,generics,casting,dynamic-cast,Java,Performance,Generics,Casting,Dynamic Cast,案例A: 列出MyList; while(index两者的性能应该相同。第一个版本确实创建了JVM强制转换指令,但它是由编译器隐式添加的。在这两种情况下,运行时操作都是强制转换到列表。运行时不保留泛型类型 您可以通过检查字节码来验证这一点,字节码在两个版本中应该是相同的。两个版本的性能应该是相同的。第一个版本确实创建了JVM强制转换指令,但它是由编译器隐式添加的。在这两种情况下,运行时操作都是强制转换到列表。运行时不会保留泛型类型 您可以通过检查字节码来验证这一点,字节码在两个版本中应该是相同的
列出MyList;
while(index两者的性能应该相同。第一个版本确实创建了JVM强制转换指令,但它是由编译器隐式添加的。在这两种情况下,运行时操作都是强制转换到列表。运行时不保留泛型类型
您可以通过检查字节码来验证这一点,字节码在两个版本中应该是相同的。两个版本的性能应该是相同的。第一个版本确实创建了JVM强制转换指令,但它是由编译器隐式添加的。在这两种情况下,运行时操作都是强制转换到列表。运行时不会保留泛型类型
您可以通过检查字节码来验证这一点,字节码在两个版本中应该是相同的。Java泛型是一种编译时抽象。字节码中没有留下它们的证据。它们只是简化了开发,但不会影响性能。在字节码中,您的第一个代码示例与第二个完全相同.Javac将为您插入强制转换。Java泛型是一种编译时抽象。字节码中没有留下它们的证据。它们只是简化了开发,但不会影响性能。在字节码中,您的第一个代码示例看起来与第二个完全相同。Javac将为您插入强制转换。所有泛型中的st是一个编译时功能。Java运行时与泛型无关。我建议您使用案例a,因为您总是确信列表将只包含字符串对象,而不包含其他内容。这将帮助您避免运行时出现ClassCastException,因为您总是确信列表将只包含字符串对象和没有别的了
我认为这两种方法都需要相同的执行时间,因为java运行时在这两种情况下已知的List对象是相同的(List MyList;)。在案例A中:List MyList;将作为List MyList传递给JVM,这与案例B相同。首先泛型是一种编译时功能。Java运行时与泛型无关。我建议您使用案例A,因为您始终确信列表将只包含字符串对象,而不包含其他内容。这将帮助您避免类类型划分运行时异常,因为您始终确保列表将只包含字符串对象,而不包含其他对象
我认为这两种方法都需要相同的执行时间,因为java运行时在这两种情况下已知的List对象是相同的(List MyList;)。在案例A中:List MyList;将作为List MyList传递给JVM,这与案例B相同。一旦您获得了它们的字节码,您将看到它们都是相同的。因此它们的性能都没有变化。
一旦您获得了它们的字节码,您将看到它们都是相同的。因此存在两者的性能都没有变化。
List<String> MyList;
while(index<100) {
MyList = MyObject.get(MyIndex);
}
List MyList;
while(index<100) {
MyList = (List<String>) MyObject.get(MyIndex);
}