Java-内存分析

Java的内存分析
	--	栈中存放局部变量
		局部变量:方法的参数,或者方法{}内部的变量
		作用域:一旦超出作用域,立刻从栈内存当中消失。
	--	堆
		凡是new出来的东西,都放在堆当中。
		堆内存里面的东西都有一个地址值:16进制
		堆内存里面的数据,都有默认值。规则:
		如果是整数             默认值为0
		如果是浮点数         默认值为0.0
		如果是字符             默认值为‘\u0000’
		如果是布尔          	默认值为false
		如果是引用类型       默认值为null
	--	方法区
    	存储.class相关信息,包含方法的信息。
    	常量池、static final 修饰的成员变量都存储于方法区中
    	在类加载的时候,会将静态内容也加载到方法区的静态域中,静态域的内容先于对象存在,这个静态内容被所有的对象共享

image-20210909195815387

解析

  1. 首先执行main方法,会在栈中开辟一个main栈桢
  2. 在遇到Person时,会先加载它的字节码信息Person.class
  3. 执行等于后面的Person对象(对象放在堆中),为其赋一个地址值,这个对象中由三个成员变量,分别为这三个变量开辟内存初始化,int类型默认是0,字符串默认是null
  4. 去执行Person的构造器,就去去找Person方法,如何为这个方法开辟一个构造器栈桢,将a、b、c三个局部变量分别存入到栈中,为其赋值(基本数据类型赋值时直接传值,引用数据类型赋值时,它首先会把值放到字符串常量池里,它对应有一个地址,然后将这个地址赋给变量)a=1,b=20,c=地址值。
  5. 将abc的值分别赋值到堆中的变量,这个方法就结束了,一旦结束,这个方法就会从栈内存中消失
  6. 会在main方法中将p存入,把堆中对象的地址值赋给p,到此,程序就结束了

image-20210909205749210

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值