【发布时间】:2011-08-12 21:49:21
【问题描述】:
【问题讨论】:
标签: java class object memory-management
【问题讨论】:
标签: java class object memory-management
类成员函数代码内存是分配一次还是每次 对象的实例化
每个类分配一次,而不是每个对象一次。准确地说,它为每个类/类加载器对分配一次。你可以认为它是由编译器分配的,只要你理解编译器包含 JIT 或 HotSpot 所做的任何事情。
【讨论】:
这不是一个简单的答案。
代码在类加载时加载一次,但代码可以内联到其他类的方法中(因此每次加载其他类时都会加载),并且可以对类进行垃圾收集,然后再重新加载,所以代码再次加载。
分配的许多方面也将取决于 VM 的实现。
【讨论】:
答案与您的其他问题基本相同,只是它更具动态性。对于最流行的 Sun/Oracle VM:可执行代码由 JIT (Just-In-Time) 编译器按需编译到代码缓存中,并由 Hotspot 编译器即时进一步优化(例如内联)。
方法被调用时,方法指针、方法变量引用和值作为上下文放入栈中,然后执行代码缓存中的代码。
【讨论】: