首页 > 代码库 > 实例化,掌握栈与堆内存的关系
实例化,掌握栈与堆内存的关系
JAVA中到底有多少内存区域呢?
1)栈内存:可以保存对象的名称(保存,访问的堆内存地址)。
2)堆内存:保存每个对象的全局属性。
3)全局数据区:保存static类型的属性。
4)全局代码区:保存所有方法的定义。
1.声明对象,Person per,栈内存中声明,与数组一样,数组名称保存在栈内存中,只开辟栈内存的对象是无法使用的,必须有其堆内存的引用才能使用。
2,实例化对象,new Person();在堆中开辟内存空间,所有内容都是默认的。
3,String:是一个字符串,首字符是大写的,本身是一个类,就是引用数据类型,默认值是null;
1.对象保持在栈内存中,属性保存在堆内存中,在程序中所有的方法是保存在全局代码区中,此区是所有对象共享的。
2.在使用对象的时候,对象必须实例化之后才能使用(实例化对象,并不单单指通过new关键字实现的,只有有堆内存的空间指向,则表示实例化成功)
3,在引用操作的时候,如果一个对象没有堆内存的引用(也就是实例化),而调用属性或方法,就会出现空指向异常。
3,对象共用一个堆内存空间:
Person p1=new Person();实例化p1对象
Person p2=p1;把p1的堆内存空间使用权给p2.
此时,设置p2对象的内容,相当于设置p1对象的内容,因为他们是共用一个堆空间。
如,p2.age=30,等价于p1.age=30;
4,垃圾回收机制
Person p1=new Person();
Person p2=new Person();
p1.name="小明";
p1.age=30;
p2.name="小红";
p2.age=23;
p2=p1;此时把p1的堆内存使用权给p2,
因为p2的堆内存指向改变了,这时候p2所指向的内存必须断开,这段内存也就成为了垃圾内存。
实例化,掌握栈与堆内存的关系