【问题标题】:Where the instance variables and instance methods are stored in java?实例变量和实例方法在java中存储在哪里?
【发布时间】:2018-06-08 19:58:19
【问题描述】:

在下面的程序中,是否意味着创建了 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);
    }
} 

【问题讨论】:

标签: java memory-management


【解决方案1】:

Java 语言规范没有说明内存是如何组织的,或者对象、方法和类是如何表示的。

所以,答案是:你不能也不应该知道。

【讨论】:

    【解决方案2】:

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

    你可以找到一个简单的例子来说明如何在 java here 中为对象管理内存

    【讨论】:

    • Java 语言规范中没有任何内容说明对象的存储位置、内存的管理方式,甚至根本没有堆。事实上,大多数现代主流的高性能 Java 实现都会执行逃逸分析和/或逃逸检测,并且可以证明没有引用逃逸本地范围,并且在本示例中将分配堆栈上的所有内容。一个复杂的实现甚至可以证明没有副作用,并且内联并将所有内容优化为三个静态调用 println 并使用常量字符串。
    猜你喜欢
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 2019-11-03
    • 2015-01-25
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多