首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java内存泄漏的原因

java内存泄漏的原因
EN

Stack Overflow用户
提问于 2021-07-05 08:55:06
回答 2查看 739关注 0票数 0

这与Java中的内存泄漏有关。我想知道,java中的内存泄漏到底是什么?导致内存泄漏的不同因素或代码错误是什么?如何识别给定代码中的内存泄漏?

这些大多是面试时常问的问题,我想详细了解这些问题。有人能解释一下并帮助我吗。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-05 09:04:27

然而,这个问题太粗糙了,无法在这里得到完全正确的答案。我只向你展示了常见的行为模式。

什么是内存泄漏?

内存泄漏是这样一种情况,即堆中存在的对象不再被使用,但是垃圾收集器无法从内存中删除它们,因此它们被不必要地维护。内存泄漏是不好的,因为它阻塞内存资源,并随着时间的推移降低系统性能。

中导致内存泄漏的原因

第一个可能导致Java内存泄漏的场景是使用静态字段引用一个重对象。我们将ArrayList创建为一个静态字段--在JVM进程的生存期内,JVM垃圾收集器将永远不会收集该字段,即使在对其进行计算之后也是如此。

内存泄漏的症状:

一开始工作得很快,但随着时间的推移而变慢。

JVM

  • Out-of-Memory

  • 适用于小数据集,大数据集的性能问题严重,

  • 一直在增加JVM

  • Spontaneous崩溃中的堆错误中的旧一代内存使用量。

常见内存泄漏:

文件/文本缓冲区未关闭。

如果等于()和hashcode(),则不会实现保持引用活动的哈希映射。

代码语言:javascript
复制
import java.util.Map;
public class MemLeak {
    public final String key;
    public MemLeak(String key) {
        this.key = key;
    }

    public static void main(String args[]) {
        try {
            Map map = System.getProperties();
            for(;;) { map.put(new MemLeak("key"), "value"); }
        } 
        catch(Exception e) { e.printStackTrace(); }
    }
}

如何修复它们?

有两种方法。第一个是“快速修复”尝试。如果失败了,你就得走很长的路。

JVM快速修复: Eclipse内存泄漏警告(捕获一些leaks)

  • Manually禁用和启用部分代码,并使用JVM工具(或j控制台或Thermostat).

)观察的内存使用情况。

票数 2
EN

Stack Overflow用户

发布于 2021-07-05 09:02:10

Java中的内存泄漏通常不会发生。

这并不是经典意义上的:在其他编程语言中,您通常需要手动释放内存。这在Java中不会发生,因为垃圾收集器通常会为您删除未使用的数据。

但是,在Java中,您仍然可以耗尽内存。Java中最接近“内存泄漏”的地方是,您保留了对不再需要的对象的引用,并且对象越来越多。

因此,也许您有一个包含大量对象的列表,并且忘记将它们从列表中删除,即使您不再需要它们。这样,垃圾收集器就不能删除不必要的objetcs,因为它们仍然是需要的。

也可以查看谷歌的WeakReference

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68253294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档