java面向对象-创建对象内存分析(jvm)

java面向对象-创建对象内存分析


首先,我们先了解方法区,栈,堆都是干嘛的,有什么用?


方法区(静态区):

  • 方法区是最先有数据的,因为类是最先被加载的
  • 它用来存储类信息、class对象、静态变量、字符串常量等等,被所有线程共享
  • 方法区实际也是堆

  • 每当方法被调用时,栈都会创建一个栈帧(存储局部变量、操作数、方法出口等)
  • 创建对象所需要的内存是由栈来分配的
  • 用于存放该线程执行方法的信息(实际参数,局部变量等)
  • 是线程私有的,不能实现线程之间的共享

  • 堆用来存储创建好的对象和数组(数组也是对象),成员变量(实例变量)
  • 重点:凡是通过new运算符创建的对象,都存储在堆内存当中。
  • new运算符的作用就是在堆内存中开辟-块空间
  • 被线程所共享

创建对象内存分析

在这里插入图片描述
在这里插入图片描述首先我们先创建一个Student类,类中定义了成员变量,再去测试类中实例化Student对象

内存分析

第一步:
当我们运行测试类时,类和static都是最先被加载的,Student类和测试类都会出现在方法区

第二步:
当运行到main方法时,就是由栈来执行了,我们在main方法实例化了Student对象,所以栈会为Student对象在堆中分配内存空间,并保存了Student对象的内存地址,通过引用变量来调用这个对象,如:Student对象在栈中显示的格式为:
Student s1 =01234;
0
1234就是对象所在堆的内存地址,我们再通过引用变量s1来引用这个对象

第三步:
堆内存就会开辟一块空间存储栈中所分配的对象,并且堆内存会给每个对象分配一个内存地址,如Student对象就分配了一个内存地址:0*1234
new运算符的作用就是在堆内存中开辟-块空间

参考文献:什么是栈,堆,方法区

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值