加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java分配内存泄漏

发布时间:2020-12-14 05:57:10 所属栏目:Java 来源:网络整理
导读:我必须假设以下方法不会泄漏内存: public final void setData(final Integer p_iData){ data = p_iData;} 数据是某类的属性. 每次调用该方法时,新的Integer都将替换当前存在的数据引用.那么当前/旧数据发生了什么? Java必须在幕后做点什么;否则,每次分配对
我必须假设以下方法不会泄漏内存:
public final void setData(final Integer p_iData)
{
    data = p_iData;
}

数据是某类的属性.

每次调用该方法时,新的Integer都将替换当前存在的数据引用.那么当前/旧数据发生了什么?

Java必须在幕后做点什么;否则,每次分配对象时我们都必须将任何对象置零.

解决方法

简单解释:

垃圾收集器会定期查看系统中的所有对象,并查看实时引用中不再可访问的对象.它释放了任何不再可达的对象.

请注意,您的方法根本不会创建新的Integer对象.例如,可以一次又一次地传递对同一个Integer对象的引用.

垃圾收集的现实比这复杂得多:

>现代GC往往是世代的,假设大多数对象都是短命的,所以它不需要经常检查整个(可能很大)的堆;它可以经常检查“最近”对象的活跃度>对象可以有终结器 – 代码在垃圾回收之前运行.这通过循环延迟了这些对象的垃圾收集,并且该对象甚至可以通过使其自身可达而“复活”自身>现代GC可以并行收集,并有许多调整选项

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读