1. 程序计数器内存 :记录程序执行的行号,记录程序执行到哪里。
2. 堆内存:存储对象的,所有用new关键字创建的对象都是存在堆内存中,堆内存存储对象的空间是不固 定的,但每个对象的内存空间都有地址。
3. JVM方法栈内存 :JVM每执行一个方法,都会为方法创建一个方法栈内存,方法中所有的变量、参数等 都在方法栈中声明。执行一个方法时,JVM就会将方法栈内存的栈帧压入到JVM方法栈内存中。
例如:调用了a() 方法,在a()方法中调用 b() ,我们都知道 b()执行完毕后,a()才能执行完毕 ; JVM现将a方法的 栈帧压入JVM栈内存,a方法执行完毕后从JVM栈内存中弹出 。
4. 本地方法栈内存 :当用Java语言调用其他语言的方法功能时。
5. 方法区 :存储类信息的。
class Test{
void a(int i){
Person p = new Person();
b();
System.out.println("hello");
}
void b(){
Person p = new Person();
System.out.println("b hello");
}
public static void main(String[] args){
Test t = new Test();
t.a();
}
}

Person p1 = new Person();
//p1中的地址 存储到 p2中
Person p2 = p1;
//p1中地址清空,p1没有存储任何的地址
p1 = null;
p2 = null;
//Person对象再也 操作不到了
//空指针异常 NullPointerException
//调用了一个引用为空的 属性或方法时
p1.name = "tom";
//假设在下行出现了空指针异常
System.out.println(a);
System.out.println(a.b);
a.b.c().d().toString(); //找a是不是null ;a.b是不是null ;a.b.c()
本文详细介绍了Java中的五种主要内存区域:程序计数器、堆内存、JVM方法栈、本地方法栈及方法区。解释了这些内存区域的主要用途及其在程序运行过程中的作用,并通过示例展示了对象创建及引用的过程。
527

被折叠的 条评论
为什么被折叠?



