【问题标题】:Are class methods duplicated a million times if I have a million instances?如果我有一百万个实例,类方法是否会重复一百万次?
【发布时间】:2019-09-25 05:58:06
【问题描述】:

假设我有这个代码:

class A {
  void f(){
    // ... some long function code
  }
}
for (int i = 0; i < 1000000; i++) {
  A a = new A();
}

我的问题是:如果在这种情况下,函数会在内存中复制一百万次吗?如果是这样,使用静态方法有意义吗?

【问题讨论】:

  • 为什么投反对票?请解释...
  • 我认为它回答了这个问题:stackoverflow.com/a/6606490/2956272.
  • 取决于上下文。如果您在所有对象中都有相同的东西,那么是的。尽管我怀疑方法会占用内存空间,但请将该方法设为静态。

标签: java


【解决方案1】:

为什么你认为 f() 方法需要被复制一百万次?该方法只不过是单个命名空间中的一组reusable instructions 组。方法的定义很容易在运行时从字节码中得到。因此,JVM 不需要复制创建的每个 Object 中的方法定义,因为它不需要这样做,并且对于每种静态、非静态的方法类型都是如此。

【讨论】:

  • 如果 op 询问变量,这个问题会更有意义。
  • @Goion 是的,如果问题是关于变量/属性的更有意义。
  • 谢谢,现在我对一个简单的问题有了一个清晰而简单的答案。我不明白为什么人们不赞成我
【解决方案2】:

这总是取决于。

有时方法依赖于对象的属性,因此对于每个对象,此类方法的行为会有所不同。

另一方面,static 方法必须独立于对象非静态属性,因此可以在不实例化对象的情况下调用它。

这取决于你想要达到的目标。

示例:假设您有一个类User,并且您想获取该类对象的年龄。有通用的static 方法有意义吗?不,因为每个用户都有不同的年龄。

另一方面,您希望有方法来获取人的类型,例如 "I am user" - 这将独立于对象的状态(属性),因此您可以使用此方法 @987654325 @。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 2012-11-04
    • 2020-06-02
    • 1970-01-01
    相关资源
    最近更新 更多