use*_*482 6 java memory oop object
考虑这个课程:
public class Test {
private int bar = 5;
public void foo () {
System.out.println("hi");
}
}
Run Code Online (Sandbox Code Playgroud)
现在假设我们有以下代码段执行:
Test obj1 = new Test();
Test obj2 = new Test();
Test obj3 = new Test();
Run Code Online (Sandbox Code Playgroud)
所有三个对象都存在于同一范围内.因为bar不是静态的,所以内存中会有三个独立的bar实例.
在内存中有foo方法的三个实例吗?
JVM是否做了一些魔术,以便每个对象可以在内存中使用一个方法声明?
是否有这种情况的名称,以便我可以看到其他语言是否这样做?
方法通过索引引用,没有方法的实例,即它们不占用额外的内存。
负责处理基于类的方法的 Java 指令集是invokevirtual:
http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.invokevirtual
以下是对幕后发生的情况的更详细了解(比我能解释得更好):
http://zeroturnaround.com/rebellabs/java-bytecode-fundamentals-using-objects-and-calling-methods/
其他参考资料
这是一个类似的问题: How much memory is using for function引用在Java对象中?