JVM - 堆和堆栈

时间:2010-05-13 11:03:19

标签: java multithreading memory jvm

每当加载一个类时,堆中存储的内容以及堆栈中存储的内容是什么?

线程也在哪里?

4 个答案:

答案 0 :(得分:4)

引用类型在堆中。

任何基本类型数据和对堆上的值的引用(方法的参数/局部变量)都在堆栈上。

每个线程都有自己的堆栈。

应用程序中的所有线程共享相同的堆。

答案 1 :(得分:3)

这很简单:

  • 对象(即类的实例)在堆上始终。它们不可能是其他任何地方
    • 字段是对象的一部分,因此它们也存在于堆中。
  • 局部变量(包括方法/构造函数)参数在堆栈上始终。他们不能在其他任何地方。

请注意,局部变量只能 保存引用(“指针”)或原始值。局部变量不能保存“对象”。

请注意,视图是JVM规范中定义的视图。如果需要,具体的JVM可以在非堆区域中分配对象。例如:如果它知道新创建的对象永远不会转义当前调用,那么可以将实例化对象放入堆栈区域。但是,这是开发人员无法看到的非常优化。

答案 2 :(得分:0)

原语:堆栈

对象:堆

线程:共享同一堆时有一个单独的堆栈。

答案 3 :(得分:0)

@Joachim Sauer

如果你说的是真的,那么为什么,在下面的代码中,

    class Student{

    int age;               //instance variable
    String name;     //instance variable

      public Student()
  {
    this.age = 0; //local variable and member of an object
    name = "Anonymous"; 
  }

那为什么不是'name ='Anonymous“; '一个局部变量?? 它是什么类型的变量,它在哪里生活?