如何在Java中为类成员函数分配内存

时间:2011-08-12 21:49:21

标签: java class object memory-management

我发现了类似的问题:

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

但那里的答案只谈到了C / C ++的案例。如果我使用Java,有人可以告诉我这个问题的答案吗?

3 个答案:

答案 0 :(得分:1)

  

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

每个类分配一次,而不是每个对象分配一次。确切地说,每个类/类加载器对分配一次。您可以将其视为由编译器分配,只要您了解编译器包含JIT或HotSpot所做的任何事情。

答案 1 :(得分:0)

这不是一个简单的答案。

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

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

答案 2 :(得分:0)

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

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