【问题标题】:Does an instance method get loaded into memory per object or per class?实例方法是按对象还是按类加载到内存中?
【发布时间】:2011-02-17 16:00:58
【问题描述】:

如果我有一个带有巨大方法f() 的对象O,并且我将10000 个O 的示例加载到内存中。 f() 的 10000 个示例是否也加载到内存中?如果是这样,这是否意味着如果可能我会通过将此函数设为静态来节省内存?

【问题讨论】:

    标签: java memory memory-management static


    【解决方案1】:

    实例方法被加载到 JVM 的方法区。它被加载一次,但是每次调用 f() 都会有很多堆栈,以跟踪自己的局部变量值。

    【讨论】:

    • 如果您错了,请告诉您?如果您不确定,请不要回答问题。
    • 请注意,该方法的堆栈空间仅在调用它时使用。任何时候都不会因为创建了 10,000 个实例而使用了 10,000 个堆栈。
    • @DJClayworth 是的,没错。当一个方法完成时,堆栈空间被移除。递归的时候呢?
    • 我可能错了,但不是每个类加载器链加载一次类,而不是每个 JVM 一次?方法也应该如此:每个类加载器链一次
    【解决方案2】:

    没有。该方法只加载了一个实例。

    【讨论】:

      【解决方案3】:

      实例方法只是一个模板,并在一个类中定义(不是在每个实例中)。将其设为静态不会节省内存。

      【讨论】:

        【解决方案4】:

        没有。方法不是实例的一部分;他们是班级的一部分。为每个实例重复代码是没有意义的(因为它永远不会改变),所以很简单,实现比这更智能。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-10-24
          • 1970-01-01
          • 2014-03-12
          • 2016-01-28
          • 1970-01-01
          • 1970-01-01
          • 2011-05-19
          • 1970-01-01
          相关资源
          最近更新 更多