【问题标题】:where the memory allocated when we declare static? [duplicate]当我们声明静态时分配的内存在哪里? [复制]
【发布时间】:2012-06-11 11:41:09
【问题描述】:

可能重复:
static allocation in java - heap, stack and permanent generation

这是一个小混乱...定义静态类,方法和变量。在这三种情况下,因此分配了内存。 ?我的老板对 C 很熟悉,他说只有变量在堆内存中,其余的(静态类和静态方法)将保留在主内存中。那是真的吗?有什么解释吗?

还有一个 在android中使用静态类和静态方法是一种最佳实践?

【问题讨论】:

标签: java android


【解决方案1】:

试试这个,

static members are stored in Method Area.

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

Non-heap Memory

它由‘Method Area’ 和其他内部处理所需的内存组成。所以这里的主要参与者是“方法区”。

Method Area

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

以上三个(堆内存、非堆内存和方法区)是内存和JVM的主要术语。

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

【讨论】:

  • 没有。静态字段和常量存储在堆中的 Class 对象中。
【解决方案2】:

静态变量与类声明(方法和属性等)保存在同一位置。 1)。类(由类加载器加载)位于堆上称为永久代的特殊区域中,静态字段也位于相同的位置,因为它们对于类的每个实例都是通用的。 更多详情:

see this answer

【讨论】:

    猜你喜欢
    • 2011-12-12
    • 2013-12-19
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 2015-11-03
    • 2020-12-16
    相关资源
    最近更新 更多