Java 链接器是如何工作的?
2022-09-02 02:50:38
我想知道Java链接器是如何工作的。具体来说,它以哪种顺序将类,接口,包,方法等组合成jvm-可执行格式。我在这里找到了一些信息,但是关于链接顺序的信息并不多。
我想知道Java链接器是如何工作的。具体来说,它以哪种顺序将类,接口,包,方法等组合成jvm-可执行格式。我在这里找到了一些信息,但是关于链接顺序的信息并不多。
没有Java“链接器”这样的东西。然而,有一个类装入器的概念 - 给定一个来自“某个地方”的java字节代码数组 - 可以创建一个类的内部表示,然后可以与等一起使用。new
在此方案中,接口只是特殊类。方法和字段在装入类时可用。
首先:方法始终是类的一部分。接口基本上只是特殊类,包只是类的完全限定名称的一部分,对类文件的可见性和物理组织有一定的影响。
所以问题归结为:JVM如何链接类文件?您链接到的 JVM 规范说:
Java编程语言允许在何时发生链接活动(并且由于递归,加载)时实现灵活性,前提是尊重语言的语义,在初始化之前完全验证和准备类或接口,并且在链接期间检测到的错误在程序中某个点抛出,该点程序采取了某些可能需要链接到所涉及的类或接口的操作在错误中。
例如,实现可以选择仅在使用类或接口中的每个符号引用时单独解析(延迟或后期解析),或者一次解决所有符号引用,例如,在验证类时(静态解析)。这意味着,在某些实现中,在初始化类或接口后,解析过程可能会继续。
因此,这个问题只能针对特定的 JVM 实现来回答。
此外,它不应该对Java程序的行为产生影响,除非可能因为链接错误导致运行时实例被抛出的确切点。Error