gpt4 book ai didi

java - 编译器 + 类间引用 : how does javac do quickly what C++ compilers do slowly?

转载 作者:搜寻专家 更新时间:2023-10-31 08:04:36 24 4
gpt4 key购买 nike

<分区>

enter link description here如果您有一堆相互引用并使用彼此方法的类,Java 编译器如何快速解决类间引用?

我知道 C++ 编译器在这方面是如何工作的:每个 .cpp 文件都是单独编译的,它们使用那些糟糕的 .h 文件来声明类字段/方法,以便每次都重新解析同一组文件,/或者编译器必须支持预编译头文件。

但 Java 不这样做,并且在类接口(interface)/实现的程序源中没有像 Turbo Pascal 将它们分开的方式进行分离。

我可以看到,如果您有一个类 Foo 并且它引用类 Bar、Baz、Quux,它们都在一个单独的 barbazquux.jar 文件中,那么事情会很简单:.jar 文件已经被编译,所以当 Foo.java 被编译时,它可以去看看 barbazquux.jar 中的 .class 文件。

但是如果你有循环类引用,并且类 Foo 引用类 Bar,类 Bar 引用类 Foo,它怎么可能编译 Foo.java 而不必先编译 Bar.java 然后决定它必须编译 Foo.java 并得到陷入循环?

Java 编译器如何处理类间引用?


编辑:yair 指出 another question答案含糊其辞地提到了多 channel 编译器。好的,所以有多个 channel 。每次通过究竟发生了什么?Java 是如何设法如此快速地编译的?它是否必须在每次传递时重新解析每个文件,或者它是否存储抽象语法树以节省时间,还是什么?

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