【问题标题】:How the memory is allocated for class member functions in JavaJava中如何为类成员函数分配内存
【发布时间】:2011-08-12 21:49:21
【问题描述】:

我发现了一个与我类似的问题:

“类成员函数代码内存是分配一次还是每次实例化对象?”,可以找到here

但那里的答案只讨论了 C/C++ 的情况。如果我使用 Java,谁能告诉我这个问题的答案?

【问题讨论】:

    标签: java class object memory-management


    【解决方案1】:

    类成员函数代码内存是分配一次还是每次 对象的实例化

    每个类分配一次,而不是每个对象一次。准确地说,它为每个类/类加载器对分配一次。你可以认为它是由编译器分配的,只要你理解编译器包含 JIT 或 HotSpot 所做的任何事情。

    【讨论】:

      【解决方案2】:

      这不是一个简单的答案。

      代码在类加载时加载一次,但代码可以内联到其他类的方法中(因此每次加载其他类时都会加载),并且可以对类进行垃圾收集,然后再重新加载,所以代码再次加载。

      分配的许多方面也将取决于 VM 的实现。

      【讨论】:

        【解决方案3】:

        答案与您的其他问题基本相同,只是它更具动态性。对于最流行的 Sun/Oracle VM:可执行代码由 JIT (Just-In-Time) 编译器按需编译到代码缓存中,并由 Hotspot 编译器即时进一步优化(例如内联)。

        方法被调用时,方法指针、方法变量引用和值作为上下文放入栈中,然后执行代码缓存中的代码。

        【讨论】:

          猜你喜欢
          • 2012-12-26
          • 1970-01-01
          • 1970-01-01
          • 2017-03-22
          • 2011-12-20
          • 2013-10-29
          • 2011-07-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多