答案 0 :(得分:1)
是否将类成员函数代码内存分配一次或分配 对象的实例化
每个类分配一次,而不是每个对象分配一次。确切地说,每个类/类加载器对分配一次。您可以将其视为由编译器分配,只要您了解编译器包含JIT或HotSpot所做的任何事情。
答案 1 :(得分:0)
这不是一个简单的答案。
加载类时会加载一次代码,但是代码可以内联到其他类的方法中(每次加载其他类时都会加载),并且可以对类进行垃圾回收并稍后重新加载,所以代码再次加载。
分配的许多方面也将取决于VM的实施。
答案 2 :(得分:0)
答案与您的其他问题基本相同,只是它更具动态性。对于最流行的Sun / Oracle VM:可执行代码根据需要由JIT(即时)编译器编译到代码缓存中,并由Hotspot编译器进行进一步优化(例如内联)。
当方法被调用方法指针时,方法变量引用和值作为上下文放在堆栈上,然后执行代码缓存中的代码。