返回信息流【 以下文字转载自 Java 讨论区 】
发信人: hmk (头发,腹肌和手指), 信区: Java
标 题: 有关对象生命周期的问题
发信站: 北邮人论坛 (Wed Jul 28 15:32:27 2010), 站内
thinking in java 里面说:
c++可以把对象放在栈里或者静态内存区里,这样可以获得较快的运行速度。
java把对象放在堆里,这样编译器不知道什么时候对象该被清除,所以需要使用垃圾回收器。
如果在栈里面创建对象,编译器会自动判断对象的寿命有多长,并且进行自动的清理。
请问大牛们:
c++什么时候在栈里创建对象,什么时候在静态内存区里创建对象,什么时候在堆里创建对象呢?在栈里面创建对象既然又快又不需要人工清理,为什么不针对所有的情况都采用这种方式呢?
既然编译器不知道对象的寿命有多长,那么java的垃圾回收器是怎么运行的呢?
虽然有一部分是关于c++的,但是我是在看thinkinginjava的时候看到的问题,就在这问了吧,请大家不吝赐教
这是一条镜像帖。来源:北邮人论坛 / cpp / #41884同步于 2010/7/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
有关对象生命周期的问题 (转载)
hmk
2010/7/28镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
非大牛,说一点自己的理解
局部变量都是放在栈里,当局部变量的作用域过期时,程序自动清理对象
静态变量放在静态存储区,当整个程序结束时,程序自动清理对象
什么时候在堆里什么时候在栈里创建对象,这个问题理解的不够透彻。比如,你需要一块内存,但是事先你又不确定这块内存有多大,只能在程序运行过程中动态确定,那这时动态申请就比较方便了。又比如,需要连续申请几块大内存,如果在栈里申请,那么有可能会导致栈溢出的,这时就只能通过动态创建了
编译器不知道对象的寿命有多长,但是垃圾回收器可以记录某个对象被引用的次数,当次数为0就可以清除了
大牛们轻拍~~~