Java中会存在内存泄漏吗,请简单描述。

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java中会存在内存泄漏吗,请简单描述。

内存泄漏是指不再被使⽤的对象或者变量⼀直被占据在内存中。

理论上来说,Java是有GC垃圾回收机制的,也就是说,不再被使⽤的对象,会被GC⾃动回收掉,⾃动从内存中清除。

但是,即使这样,Java也还是存在着内存泄漏的情况,
1、长⽣命周期的对象持有短⽣命周期对象的引⽤就很可能发⽣内存泄露。

尽管短⽣命周期对象已经不再需要,但是因为长⽣命周期对象持有它的引⽤⽽导致不能被回收,这就是Java中内存泄露的发⽣场景,通俗地说,就是程序员可能创建了⼀个对象,以后⼀直不再使⽤这个对象,这个对象却⼀直被引⽤,即这个对象⽆⽤但是却⽆法被垃圾回收器回收的,这就是Java中可能出现内存泄露的情况,例如,缓存系统,我们加载了⼀个对象放在缓存中(例如放在⼀个全局map对象中),然后⼀直不再使⽤它,这个对象⼀直被缓存引⽤,但却不再被使⽤。

检查java中的内存泄露,⼀定要让程序将各种分⽀情况都完整执⾏到程序结束,然后看某个对象是否被使⽤过,如果没有,则才能判定这个对象属于内存泄露。

如果⼀个外部类的实例对象的⽅法返回了⼀个内部类的实例对象,这个内部类对象被长期引⽤了,即使那个外部类实例对象不再被使⽤,但由于内部类持久外部类的实例对象,这个外部类对象将不会被垃圾回收,这也会造成内存泄露。

2、当⼀个对象被存储进HashSet集合中以后,就不能修改这个对象中的那些参与计算哈希值的字段了,否则,对象修改后的哈希值与最初存储进HashSet集合中时的哈希值就不同了,在这种情况下,即使在contains⽅法使⽤该对象的当前引⽤作为的参数去HashSet集合中检索对象,也将返回找不到对象的结果,这也会导致⽆法从HashSet集合中单独删除当前对象,造成内存泄露。

相关文档
最新文档