[英]How the memory is allocated for class member functions in Java
我发现了一个与我类似的问题:
“是 class 成员 function 代码 memory 分配一次还是在每次对象实例化时分配?”,可以在这里找到
但是那里的答案只谈到了 C/C++ 的情况。 如果我使用的是 Java,谁能告诉我这个问题的答案?
class 成员 function 代码 memory 是否分配一次或每次对象实例化
每个 class 分配一次,而不是每个 object 分配一次。 准确地说,它为每个类/类加载器对分配一次。 您可以将其视为由编译器分配,只要您了解编译器包含 JIT 或 HotSpot 所做的任何事情。
这不是一个简单的答案。
代码在加载 class 时加载一次,但代码可以内联到其他类的方法中(因此每次加载其他类时加载),并且可以对类进行垃圾收集,然后重新加载,所以代码是再次加载。
分配的许多方面也将取决于 VM 的实现。
答案与您的其他问题基本相同,只是它更具动态性。 对于最流行的 Sun/Oracle VM:可执行代码由 JIT(即时)编译器按需编译到代码缓存中,并由 Hotspot 编译器即时进一步优化(例如内联)。
当方法被调用时,方法指针、方法变量引用和值作为上下文放在堆栈上,然后执行代码缓存中的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.