java c 内存管理_java – 垃圾回收与手动内存管理

这是一个非常基本的问题.我将使用C和

Java来制定它,但它确实与语言无关.

考虑C中一个众所周知的问题:

struct Obj

{

boost::shared_ptr m_field;

};

{

boost::shared_ptr obj1(new Obj);

boost::shared_ptr obj2(new Obj);

obj1->m_field = obj2;

obj2->m_field = obj1;

}

这是一个内存泄漏,大家都知道:)@R_301_463@案也是众所周知的:应该使用弱指针来打破“引用联盟”.还知道这个问题原则上不能自动解决.解决这个问题的程序员是唯一的责任.

但是有一个积极的事情:程序员完全控制了refcount值.我可以在调试器中暂停我的程序,并检查obj1,obj2的引用,并了解有一个问题.我还可以在对象的析构函数中设置断点,并观察破坏时刻(或者发现该对象未被销毁).

我的问题是关于Java,C#,ActionScript和其他“垃圾回收”语言.我可能会错过一些东西,但在我看来他们是

不要让我检查物体的计数

>对象被破坏时,不要让我知道(当对象暴露于GC时可以)

我经常听到这些语言不允许程序员泄漏记忆,这就是为什么他们是伟大的.据我所知,他们只是隐藏内存管理问题,难以解决.

最后,问题本身:

Java的:

public class Obj

{

public Obj m_field;

}

{

Obj obj1 = new Obj();

Obj obj2 = new Obj();

obj1.m_field = obj2;

obj2.m_field = obj1;

}

>是内存泄漏吗?

>如果是,我如何检测并修复它?

>如果否:为什么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值