创建同一对象的多个实例时,Java 是否复制方法实现?

When creating multiple instances of the same object, does Java replicate the method implementations?

我尝试四处寻找我的答案,但似乎找不到。

我很好奇 Java 和/或其他现代语言是否通过对方法进行某种虚拟映射来优化对象的复制。如果每次创建对象的新实例时,它都会复制与其关联的方法,而不是将它们映射到内存中的一个位置,这似乎是一种浪费。

我可以看到一些情况,例如多态性,它可能不起作用。

这可能更像是一个基础问题,但我很好奇编译器是如何处理这个问题的。

谢谢!

严格来说,这是 none 您的业务:

The Java Virtual Machine does not mandate any particular internal structure for objects.

(JVM Spec)

因此,如果您要编写自己的 JVM,并且由于某种原因您选择将方法代码的副本放入对象的每个内存中表示中,那么您可以自由地这样做。

但是,语言的定义有多个方面,这意味着同一 class 的两个对象不可能具有不同的方法——即使它们是非静态的内部 classes、动态 classes 等

因此,您是对的,space 为每个实例复制方法代码是一种浪费,Java 的认真实施并没有这样做。