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

来源:互联网 发布:淘宝代销代发货 编辑:程序博客网 时间:2024/06/03 20:27

------- 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为待拼接的字符串。 

 本地方法区: 

 寄存器:

原创粉丝点击