码迷,mamicode.com
首页 > 其他好文 > 详细

实例化,掌握栈与堆内存的关系(转)

时间:2017-04-30 17:16:06      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:bsp   cat   name   pos   类型   栈内存   空间   大写   字符串   

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所指向的内存必须断开,这段内存也就成为了垃圾内存。

技术分享

 

 
 

实例化,掌握栈与堆内存的关系(转)

标签:bsp   cat   name   pos   类型   栈内存   空间   大写   字符串   

原文地址:http://www.cnblogs.com/zcxuexi/p/6789740.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!