【问题标题】:Are methods copied when objects are created?创建对象时是否复制方法?
【发布时间】:2015-06-09 19:49:50
【问题描述】:

创建对象时,Java 会创建类属性的副本,但是,在内存中,方法会发生什么情况? Java 是创建这些代码的副本还是只为所有对象创建这些代码的一个副本?

【问题讨论】:

标签: java methods


【解决方案1】:

他们不是。因为 Java 是静态类型的,所以对象在 VM 中看起来像这样:

class_id,
field0,
field1,
...

然后调用方法的代码可以与类相关联,而不是对象,因此不需要重复。我猜您来自 Python 或 Javascript 之类的语言,您可以在其中重新分配实例上的方法?在 Java 中,您倾向于使用装饰器来执行此操作。

【讨论】:

  • 但是如果实例化后方法发生了变化呢?
  • 一些 JVM 允许您进行热代码替换,但这是一种极端情况。方法体在实例化前后几乎不会改变。
  • @ACV 这真的不会发生吗?
  • @ACV 它不会改变。 Ever.And 当它通过一些 meta-JVM-hack 进行时,对于该类的所有实例,它再次是相同的方法。
  • @DavidEhrmann 它仍然没有为一个类创建不同的“方法版本”。你总是会得到一个类的所有实例共享的方法。
猜你喜欢
  • 2014-01-29
  • 2020-08-26
  • 2014-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-24
  • 2019-05-26
相关资源
最近更新 更多