没有合适的资源?快使用搜索试试~ 我知道了~
java内存机制 堆和栈.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 193 浏览量
2022-06-09
21:23:47
上传
评论
收藏 50KB DOC 举报
温馨提示
试读
36页
java内存机制 堆和栈
资源推荐
资源详情
资源评论
java 内存机制 堆和栈
内存机制堆和栈
问题的引入:
问题一:
;
;
;
问题二:
!;
!;
; "
问题三:
;
;
;
#$;
#; "%
&#;
由于以上问题让人含糊不清,于是特地搜集了一些有关 内存分配的资料'以
下是网摘:
( 中的堆和栈
( 把内存划分成两种:一种是栈内存,一种是堆内存。
在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。
当在一段代码块定义一个变量时,( 就在栈中为这个变量分配内存空间,当超
过变量的作用域后,( 会自动释放掉为该变量所分配的内存空间,该内存空间
可以立即被另作他用。
堆内存用来存放由 ! 创建的对象和数组。
在堆中分配的内存,由 ( 虚拟机的自动垃圾回收器来管理。
在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这
个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组
或对象的引用变量。
引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中
的引用变量来访问堆中的数组或对象。
具体的说:
栈与堆都是 ( 用来在 ) 中存放数据的地方。与 *$$不同,( 自动管理
栈和堆,程序员不能直接地设置栈或堆。
( 的堆是一个运行时数据区'类的对象从中分配空间。这些对象通过
!、!、! 和 ! 等指令建立,它们不需要程
序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内
存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,
( 的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时
动态分配内存,存取速度较慢。
栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,
存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基
本类型的变量''+''','-''+和对象句柄。
栈有一个很重要的特殊性,就是存在栈中的数据可以共享。假设我们同时定义:
;
;
编译器先处理 ;首先它会在栈中创建一个变量为 的引用,然后查找栈中
是否有 这个值,如果没找到,就将 存放进来,然后将 指向 。接着处理
;在创建完 的引用变量后,因为在栈中已经有 这个值,便将 直接指
向 。这样,就出现了 与 同时均指向 的情况。这时,如果再令 #;那么
编译器会重新搜索栈中是否有 # 值,如果没有,则将 # 存放进来,并令 指向
#;如果已经有了,则直接将 指向这个地址。因此 值的改变不会影响到 的值。
要注意这种数据的共享与两个对象的引用同时指向一个对象的这种共享是不同的,
因为这种情况 的修改并不会影响到 '它是由编译器完成的,它有利于节省空间。
而一个对象引用变量修改了这个对象的内部状态,会影响到另一个对象引用变量。
是一个特殊的包装类数据。可以用:
!;
;
两种的形式来创建,第一种是用 !来新建对象的,它会在存放于堆中。每调
用一次就会创建一个新的对象。
而第二种是先在栈中创建一个对 类的对象引用变量 ,然后查找栈中有
没有存放,如果没有,则将存放进栈,并令 指向,如果已
经有则直接令 指向。
比较类里面的数值是否相等时,用 &方法;当测试两个包装类的引用是否
指向同一个对象时,用,下面用例子说明上面的理论。
;
;
;
可以看出 和 是指向同一个对象的。
!;
!;
; "
用 ! 的方式是生成不同的对象。每一次生成一个。
剩余35页未读,继续阅读
资源评论
oligaga
- 粉丝: 50
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功