黑马程序员-JAVASE入门(内存空间的分配)

------- android培训java培训、期待与您交流! ----------

Java在内存中分配的内存空间:有堆栈、堆、方法区、本地方法区和寄存器,以下对它们在内存中存储的数据进行简单描述:

 栈内存: 用于存储局部变量,数据使用完后所占空间自动释放。

 堆内存: 存放数组和对象(非静态成员变量的数据和数组的数据),通过new建立的实例都存放在堆内存中。每一个实体都有内存地址, 实体中的变量都有默认初始化值:基本数据类型中boolean型数组的默认值是false,byte、short、int、long,float,double的默认初始化值为0,char类型的默认初始化值为空格,引用数据类型默认初始化值为null。实体不再被使用后,会在不确定的时间被垃圾回收器回收。

 方法区(共享区,数据区):这里包括(类:字节码文件对象、静态区、常量池) 

 存放静态成员变量和静态方法,存放类的模板,方法区中有一个常量池,在常量池中存放字符串常量String ,其存放方式跟栈内存中局部变量的存放相似:假设要存放字符串“abc”(通过String x =“abc”;的方式),则先查找常量池中有没有“abc”的对象,若有则返回一个此对象的引用给x,若不存在则 开辟一个新的空间存放此字符串,并让x引用该对象。如果是通过String x = new String(“abc”);的方式则首先会在堆内存中new一个对象,存放“abc”,并将该对象的引用传给x,然后查看常量池中是否存在“abc”,若存在则将堆内存中的对象与之关联,若不存在,则在常量池中开辟一个空间存放“abc”,并将堆内存中的对象与之关联。若是将两个字符串拼接到一起时则会在堆内存中创建一个对象,存放拼接后的字符串,若要使拼接的字符串存放于常量池中则要用到intern()方法,具体用法:x = (s1+s2).intern(),s1 s2为待拼接的字符串。 

 本地方法区: 

 寄存器:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值