2012-06-07 34 views
5

可能重复:
static allocation in java - heap, stack and permanent generation我们声明静态时分配的内存在哪里?

其小的困惑...定义静态类,方法和variables.In这三种情况下这样分配的内存。 ?我的老板熟悉C语言,他说只有变量存在于堆内存中,而其余的(静态类和静态方法)将保留在主内存中。那是真的吗?任何解释。?

多一个 在android中使用静态类和静态方法是最佳实践吗?

+0

重复:[http://stackoverflow.com/q/405364/1073063](http://stackoverflow.com/q/405364/1073063)和[http://stackoverflow.com/q/6569557/1073063 ](http://stackoverflow.com/q/6569557/1073063)。主持人:对不起,当我标记这个时,我把错误的问题联系了起来。 – Pablo

回答

5

尝试此,

static members are stored in Method Area. 

类实例和数组存储在堆存储器。堆内存也称为共享内存。因为这是多个线程共享相同数据的地方。

Non-heap Memory 

它包括的‘Method Area’和用于内部处理所需的其它存储器。所以这里的主要玩家是'方法区'。

Method Area 

如最后一行所示,方法区域是非堆内存(特殊堆区域)的一部分。它存储每类结构,方法和构造函数的代码。每类结构意味着运行时常量和static fields

上述三个(堆存储器,非易失存储器堆和方法区)是主要的行话,当涉及到存储器和JVM。

类实例和数组存储在堆内存中。堆内存也称为共享内存。因为这是多个线程共享相同数据的地方。

+0

否。静态字段和常量存储在堆中的Class对象中。 – EJP

3

静态变量保存在Classes声明(方法和属性等)的相同位置。 1)。类(由类加载器加载)进入永久生成堆的特殊区域,并且静态字段也会到达类的每个实例所共有的相同位置。 详情:

see this answer