我的变量和引用在哪里存储在堆或堆栈中?

时间:2017-05-23 16:35:54

标签: java

请告诉我静态引用,静态原语,对象引用,对象本身和方法本身以及类信息的存储位置。

*请告诉我这个内存管理是谁?

*请告诉我储存在permgen的地方?

*请指定将为以下程序的所有对象引用,对象,基本数据(对于静态和非静态类型)分配的存储空间(堆或堆栈)。

package training;

public class Memory {


    static int var =1;
    static String s="hi";
     static Threadtutorial th;// this is another class in the same project,consider this an object.
    static Threadtutorial tt = new Threadtutorial();
    int are =2;
    int d;
    static float value;


    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int a;
        int b=1;
        Threadtutorial th;// this is another class in the nsame project,consider this an object.
        Threadtutorial tt = new Threadtutorial();
        final int var =1;
 value=8;
    }
    void somemethod(){
        int ne=3;
        String something;
        Object ref;
        Object dereee= new Object();
    }
    static void another(int b){
        int c=b;
        Object ref2;
        Object der= new Object();
    }

}

1 个答案:

答案 0 :(得分:-1)

根据JLS概念上的事情是一回事和确定性的,它们在JVM中的物理上是另一回事,并且因环境而异。

简单的部分是概念上的事物。包括方法区域,静态字段空间和其他类型级别信息的类型定义位于堆的类区域中。调用方法时,方法参数和其他方法控制信息存在于堆栈中。实例存在于堆中。

在物理上,这些东西可以在不同的时间生活在不同的地方,甚至完全消失。成员变量值可能在堆栈或寄存器中存在一段时间,而对象的其余部分甚至不在内存中。方法调用可能会完全消失。运行时解释器/编译器组合在处理程序逻辑方面有很大的余地。

你真的尝试过研究你的问题吗?你有什么想法?