内存如何分配Java中的静态变量和静态块?

时间:2014-04-08 18:47:17

标签: java static

如何在Java堆栈或堆中分配内存静态变量和静态块?

  class A{
    static int a; 
    static{}
    public static void main(String args[]){
        A h=new A();
     }
   }

创建对象时如何为静态堆栈或堆分配内存。

2 个答案:

答案 0 :(得分:1)

static关键字在java中主要用于内存管理。我们可以将static关键字应用于变量,方法,块和嵌套类。 static关键字属于类,而不是类的实例。

stactic变量的内存分配仅在类加载到内存中时才会发生一次。

所以,一旦这个类被classloader加载,内存将被分配给整数a和stacic块。

  

静态方法(实际上是所有方法)以及静态变量都存储在堆的PermGen部分中。

可能比创建它的过程的调用寿命更长的数据通常在堆上分配。例如。 new用于创建可以从过程传递到过程的对象。 堆的大小无法在编译时确定。仅通过指针或引用引用,例如,C ++中的动态对象,Java中的所有对象

过程的本地名称在堆栈上分配空间。堆栈的大小无法在编译时确定。

有关内存管理的更多信息,请参阅以下教程:http://www.oracle.com/technetwork/java/javase/memorymanagement-whitepaper-150215.pdf

答案 1 :(得分:0)

在这里,您将详细了解逐步技术。

class A{
    static int a; // goes to method area or Permanent-Generation (which is special mem area within Heap)

    static{} // goes to method area or Permanent-Generation (which is special mem area within Heap)

    public static void main(String args[]){ // goes to method area or Permanent-Generation (which is special mem area within Heap)

        A h=new A(); // 1.using the "new" keyword, an object is created in 
                          Heap
                     // 2. using the constructor A(), the memory has been allocated to the newly created object. This is called object instantiation, based on the variables and methods inside this A class.

                     //3. object ref var "h" will be created in stack

                     //4. using = operator, the memory address of newly created object will be assigned to the object ref h which sits inside the stack.

     }
   }

简而言之 静态块,类,变量,方法-位于堆的永久生成区域内。

希望这可以澄清所有人!!!谢谢!