面向对象的内存分析

发布时间 2023-04-26 15:27:35作者: 南极星丶

首先,准备好代码:

 JVM运行时数据区中有栈、堆、方法区

 当执行程序时,首先执行main方法,会在栈中给main方法分配一个栈帧:

 

然后将Person.class文件加载到方法区:

 然后Person p1 = new Person(),会在main栈帧中开辟一个p1内存空间,在堆中开辟一个对象内存地址,存放类中的属性和方法,假设内存地址为0x11。则会把对象的内存地址赋值给p1,所以p1是引用对象,内存地址指向堆中的真正的对象,然后给age和name赋值,这里会先找到p1,然后很具p1指向的堆的内存地址,找到age和name属性,其中name是字符串类型,所以赋值时先在方法区中创建一个常量池,将字符串内容放到常量池中,然后从常量池中获取数据给name赋值:

 

下一步会执行调用show方法,则会在栈中给show方法分配一个栈帧:

 

然后执行完show方法,则会将show方法出栈,之后main方法也执行完毕,则main方法也会出栈,程序执行完毕。