我已经学习Java近一年了,但在动态内存分配方面仍然感到困惑。java动态内存分配
问题1:任何人都可以详细说明当根据我写的步骤执行下面的代码时,在内存中发生了什么(请纠正我,如果我错了)?越详细越好。
问题2:如果我想深入了解JVM或Java内存,应该阅读/访问什么样的书/网站?
class Student {
private static int counter;
private String name;
private int age;
private String grade = "grade 1";
Student(String _name, int _age) {
this.name = _name;
this.age = _age;
}
public static void main(String[] args){
Student s = new Student("Emma", 6);
}
}
Student.class
文件获取加载,静态变量counter
时初始化数据区。main()
被调用,JVM为堆栈中的本地变量s
分配内存。- JVM为堆上的成员变量
name
,age
和grade
分配存储,并为存储分配零。 grade
初始化为"grade 1"
。- 构造
Student()
被调用初始化新的实例:JVM对堆栈_name
和_age
分配内存,它们初始化为"Emma"
和6
,那么它们的值复制到成员变量name
和age
。 - JVM将此新实例分配给
s
。
这似乎是一个相当准确的描述给我。有没有你不确定的地方?你的第二个问题可能是Stack Overflow的问题。我们有责任避免在这里推荐资源。 –
确保您必须交换点**(1)**是**(2)**。在类加载器完成加载类* Student *之后,将初始化类的静态成员。 – Sandro
@Sandro该类必须先加载才能运行其任何方法。交换点(1)和(2)是不可能的。 –