浅读类执行的内存变化

虚拟机内存分为栈(stack)、堆(heap)、方法区(method)三个部分

虚拟机栈、堆、方法区存储类型及其特征:

虚拟机栈(stack)
  每调用一次方法,在栈中加载一次,栈属于线程私有,是不能共享的,遵循先进后出,后进先出的原则。栈是由系统自动分配的,运行速度快,是一个连续的内存空间;
堆(heap)
  堆在JVM中只有一个,所有的线程共享一个堆,堆主要存储创建好的对象和数组,堆在JVM中是不连续的,具有分配灵活 ,速度慢的特点;
方法区(method):
  方法区是JVM机中的规范,在不同虚拟机版本有不同的实现,在JDK7以前,方法区的实现方式是“永久代”,在JDK7版本,部分去除“永久代”,静态常量,字符串常量池也挪到了堆内存中,在JDK版本则是堆和“元数据”相结合起来,在JVM中,只有一个方法区,被所有线程共享,方法区的特性跟堆相同,也是不连续的。
示例:执行时,内存是怎样变化的
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();
	}
}

在这里插入图片描述

解读
1、main方法中,执行创建一个新的对象P1
2、在堆内存中,使用方法show(),并给初始变量赋值,将地址传到方法区对应的show方法,方法区将地址返回对象
3、栈中,加载出p1.show的栈内存
4、加载完成后,将p1.show产生的内存空间清理
5、在main方法中,执行创建新的对象p2
6、堆内存中调用方法show(),并给初始变量赋值,将地址传到方法区对应的show方法,方法区将地址返回对象中
7、栈中,加载出p2.show的栈帧
8、加载完成后,将p2产生的内存空间进行清理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值