如何在Java堆栈或堆中分配内存静态变量和静态块?
class A{
static int a;
static{}
public static void main(String args[]){
A h=new A();
}
}
创建对象时如何为静态堆栈或堆分配内存。
答案 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.
}
}
简而言之 静态块,类,变量,方法-位于堆的永久生成区域内。
希望这可以澄清所有人!!!谢谢!