某个类执行时的内存变化图

栈的特点:
1.栈是描述方法执行内存模型,每个方法被调用都会产生一个栈桢,用来存储局部变量,操作数,方法出口等
2.JVM为每个线程都创建个栈,用于存放线程执行方法的信息如:局部变量,实际参数等
3.栈属于线程私有不能用于线程间的共享
4.栈的存储特性:先进后出,后进先出
5.栈有系统自由分配,速度较快,是一个连续的内存空间
堆的特点
1.堆是用于创建好的对象和数组
2.JVM中只有一个堆,被所有的线程共享
3.堆是一个不连续的内存空间,分配灵活,数度较慢
方法区:
1.方法区Java虚拟机规范
JDK7以前为永久代
JDK7已经去除部分永久代,静态变量,字符串,常量池都挪到堆内存中。
JDK7之后是元数据空间与堆结合起来的
2.JVM只有一个方法区,被所有线程共享
3.方法区也是堆,用于存存储类,常量相关信息
4.用来存放程序中的永久量或唯一内容,
程序:
public class Person {
String name;
int age;
public void show(){ System. o u t .println(“姓名:”+name+",年龄:"+age); }
}

public class TestPerson {
public static void main(String[ ] args) {
// 创建p1对象
Person p1 = new Person();
p1.age = 24;
p1.name = “张三”; p1.show();
// 创建p2对象
Person p2 = new Person();
p2.age = 35;
p2.name = “李四”; p2.show();
}
}
内存的运行图例及过程
首先main方法会在栈中产生一个main栈桢
某个类执行时的内存变化图
然后会在堆里产生p1对象,系统默认:
某个类执行时的内存变化图
new person会在方法去产生
某个类执行时的内存变化图
然后在栈里面会产生一个p1.show()的栈桢
而p1.show()会有一个隐藏形参this
某个类执行时的内存变化图
p1.shou();运行完之后出栈了,释放内存。
p2.show();与p1.show一样
当main结束后也会出栈,形成一个空栈。
某个类执行时的内存变化图
堆和方法区也是一样,释放内存。
总结:写的不好,后续一起讨论哈。