TestPerson 类执行时的内存变化图,及运行过程,虚拟机栈、堆、方法区的特点(java)

  作者:墨启飞
  环境:IDE2021. jdk2013
                          
                           
TestPerson 类执行时的内存变化图,及运行过程,虚拟机栈、堆、方法区的特点
虚拟机栈:
1. 栈描述的是方法执行的内存模型。每个方法被调用都会创建一个栈帧(存储局部变 量、操作数、方法出口等)
2. JVM 为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变
量等)
3. 栈属于线程私有,不能实现线程间的共享!
4. 栈的存储特性是“先进后出,后进先出”
5. 栈是由系统自动分配,速度快!栈是一个连续的内存空间!
堆:
1. 堆用于存储创建好的对象和数组(数组也是对象)
2. JVM 只有一个堆,被所有线程共享
3. 堆是一个不连续的内存空间,分配灵活,速度慢!
方法区(又叫静态区,也是堆)特点如下:
1. 方法区是 JAVA 虚拟机规范,可以有不同的实现。
i. JDK7 以前是“永久代”
ii. JDK7 部分去除“永久代”,静态变量、字符串常量池都挪到了堆内存中
iii. JDK8 是“元数据空间”和堆结合起来。
2. JVM 只有一个方法区,被所有线程共享!
3. 方法区实际也是堆,只是用于存储类、常量相关的信息!
4. 用来存放程序中永远是不变或唯一的内容。
public class Person
{ String name ;
int age ;
public void show(){
System.out.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方法被调用,创建一个栈帧,调用main方法的形参agre=null,然后到p1,在方法区那里加载类,获得地址设为01x,数组当做对象放在堆那里

进而p1获得地址01x,进而得到age=24,因为张三是常量所以应放在常量池,因放在方法区进而得到name=张三,接下来到show(),因其是方法所以要新建一个p1show()的栈帧,这里是自己调自己,然后得到打印的 age,name 同理得到p2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨启飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值