gpt4 book ai didi

java - javac 完成的任何类型转换?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:24:37 25 4
gpt4 key购买 nike

据我了解,如果可以在编译期间进行类型检查,那么类型转换将在编译期间完成,不会产生任何运行时开销。

例如

public Child getChild() {
Parent o = new Child();
return (Child) o;
}

类型转换是在编译期间还是在运行时完成的?

是否有任何通用规则来决定类型转换是由 javac 编译器还是由 VM 完成的?

最佳答案

其实这种情况存在三种可能:

  1. javac 编译器可以执行优化。
  2. JIT 编译器可以执行优化。
  3. JIT 编译器的 native 代码可以包含执行运行时类型检查的代码。

我希望它是选项 1 或 2。但这可能是特定于平台的。


事实上,在我的系统上字节码没有优化。如果要进行任何优化,将由 JIT 编译器来完成。 (这符合我所听到的……大多数 Java 字节码编译器在生成字节码之前几乎没有做任何优化。)

Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
Code:
0: aload_0
1: invokespecial #8; //Method java/lang/Object."<init>":()V
4: return

public Child getChild();
Code:
0: new #16; //class Child
3: dup
4: invokespecial #18; //Method Child."<init>":()V
7: astore_1
8: aload_1
9: checkcast #16; //class Child
12: areturn

}

关于java - javac 完成的任何类型转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11632000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com