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

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


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


方法区(静态区):

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

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

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

创建对象内存分析

首先我们先创建一个Student类,类中定义了成员变量,再去测试类中实例化Student对象

内存分析

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

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

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

参考文献:

经验分享 程序员 微信小程序 职场和发展