繁体   English   中英

memory 如何分配给 Java 中的 class 成员函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM