接口的默认方法存储在内存中的哪里?

Posted

技术标签:

【中文标题】接口的默认方法存储在内存中的哪里?【英文标题】:Where are the default methods of interface stored in memory? 【发布时间】:2021-08-18 13:37:31 【问题描述】:

我浏览了许多帖子,但似乎都回答了接口的静态方法存储在哪里。但是,接口可以有抽象、静态和默认方法。我知道静态和抽象方法。但是,我无法在内存中找到与默认方法存储相关的任何内容。

我可能错了,但我认为默认方法将存储在静态堆空间中,就像实例方法存储在类中一样。但是,除此之外,考虑到实现类不会覆盖接口中默认方法的实现并且不存在菱形问题,一旦调用默认方法是否也分配给堆栈帧,我会感到困惑。

我参考了以下链接:

Where are methods stored in memory?

Where are static methods and static variables stored in Java?

【问题讨论】:

【参考方案1】:

就 JVM 内存中的存储而言,默认方法没有什么特别之处。与其他类方法一样,它们是method area 的一部分。

考虑到实现类不会覆盖接口中默认方法的实现并且不存在菱形问题,如果调用默认方法也将其分配给堆栈帧,我会感到困惑。

stack frames 是在调用方法时分配的,同样与方法的种类(静态、默认等)无关。不要将它们在运行时调用期间的使用与方法代码(和其他类元数据)的存储位置混淆。

【讨论】:

以上是关于接口的默认方法存储在内存中的哪里?的主要内容,如果未能解决你的问题,请参考以下文章

Java8新特性-----接口中的默认方法和静态方法

java8新特性学习五(接口中的默认方法与静态方法)

java8新特性学习五(接口中的默认方法与静态方法)

JDK8.0接口中的默认方法和静态方法

接口的默认方法解决默认方法冲突java-jdk8

Java8新特性——接口中的默认方法和静态方法