实例变量和实例方法在java中存储在哪里?

实例变量和实例方法在java中存储在哪里?,java,memory-management,Java,Memory Management,在下面的程序中,是否意味着创建了3个实例变量和3个实例方法,并为它们分配了内存 class Foo{ String name = ""; public void greet(String name){ this.name = name; } } class Greetings { public static void main (String[] args) { Foo ob = new Foo(); Foo ob1 = n

在下面的程序中,是否意味着创建了3个实例变量和3个实例方法,并为它们分配了内存

class Foo{

    String name = "";

   public void greet(String name){

        this.name = name;
    }
}

class Greetings {
    public static void main (String[] args) {

    Foo ob = new Foo();
    Foo ob1 = new Foo();
    Foo ob2 = new Foo();

    ob.greet("hello friends");
    ob1.greet("welcome to java");
    ob2.greet("let us learn");
    System.out.println(ob.name);
    System.out.println(ob1.name);
    System.out.println(ob2.name);
    }
} 

所有3个对象都存储在堆内存中。堆的大小随着应用程序的运行而增大或减小。这里的new操作符将内存分配给堆中的对象。这意味着每次在语句中说new时,都会为堆中的对象分配一个单独的内存空间,这些方法存储在JVM内部堆中


您可以找到一个简单的例子,说明如何为java中的对象管理内存。java语言规范没有说明内存是如何组织的,也没有说明对象、方法和类是如何表示的


因此,答案是:你不能也不应该知道。

可能的重复看看:Java语言规范中没有任何内容说明对象存储在哪里,内存如何管理,甚至根本没有堆。事实上,大多数现代主流高性能Java实现都将执行转义分析和/或转义检测,并且可以证明在本例中,没有任何引用会转义本地范围,并将分配堆栈上的所有内容。一个复杂的实现甚至可以证明没有副作用,只需使用常量字符串对
println
进行三次静态调用,就可以内联并优化所有内容。