当前位置: 首页 > 面试题库 >

在Java中导致内存泄漏的最简单方法?

刘成礼
2023-03-14
问题内容

导致Java内存泄漏的最简单方法是什么?


问题答案:

除非您执行以下操作,否则您实际上无法在Java中“泄漏内存”:

  • 实习生字符串
  • 生成类
  • jni调用的本机代码中的泄漏内存
  • 在一些被遗忘或晦涩的地方保存对您不想要的事物的引用。

我认为您对最后一种情况感兴趣。常见方案是:

  • 侦听器,尤其是内部类
  • 缓存。

一个很好的例子是:

  • 构建一个Swing gui,它可以启动数量不限的模态窗口;
  • 让模态窗口在初始化期间执行以下操作: `
    StaticGuiHelper.getMainApplicationFrame().getOneOfTheButtons().addActionListener(new ActionListener(){
    

    public void actionPerformed(ActionEvent e){
    // do nothing…
    }
    })


`

已注册的操作不执行任何操作,但是即使关闭后,它也将导致模式窗口永远在内存中徘徊,从而导致泄漏-
因为侦听器从未注销,并且每个匿名内部类对象都对其外部对象持有引用(不可见) 。更重要的是-从模态窗口引用的任何对象也有可能泄漏。

这就是为什么像EventBus这样的库默认使用弱引用的原因。

除了侦听器外,其他典型示例是缓存,但是我想不到一个很好的示例。



 类似资料:
  • 我想首先说,这是我第一次必须处理性能,因为这是我第一次开发一个android应用程序。 该应用程序是一个源代码编辑器,在这里你可以打开文件,修改它们,并将它们保存回来。该应用程序由4个部分组成: 导航器视图:包含打开文件的ListView和打开文件夹的TreeView。 代码视图容器:它保存包含实际代码的视图。 代码容器:这是一个小视图,包含一个文本视图和一个自定义EditText(由我扩展Edi

  • 问题内容: 据说 String类中的方法会导致内存泄漏。是真的吗 怎么样?有什么替代方法吗? 尤其是在寻找答案时, 还有哪些其他原因可以导致Java的内存泄漏呢?这将帮助我在编码时注意。 问题答案: 在过去的JDK版本中,该方法的实现将建立一个新对象,该对象保留对整个char数组的引用,以避免复制它。因此,您可能会无意中仅使用一个字符串来引用一个很大的字符数组。 现在,此方法已更改,并且此“泄漏”

  • 在Activity中使用Thread导致的内存泄漏 原文链接 : Activitys, Threads, & Memory Leaks 原文作者 : AlexLockwood 译文出自 : 开发技术前线 www.devtf.cn 译者 : chaossss 校对者: yinna317 状态 : 完成 注:这篇博文涉及的源码可以在 GitHub 上面下载哦 做 Android 开发最常遇到的问题就是

  • 我有一些和等,但是我没有设置。你觉得会是那样吗? 你有什么想法或建议吗? PS:该应用程序在Ubuntu机器上运行 多谢.

  • 本文向大家介绍Java 内存泄漏,包括了Java 内存泄漏的使用技巧和注意事项,需要的朋友参考一下 在Java中,垃圾回收(析构函数的工作)是使用垃圾回收自动完成的。但是,如果代码中有引用它们的对象怎么办?它无法取消分配,即无法清除其内存。如果这种情况一再发生,并且创建或引用的对象根本没有被使用,它们就会变得无用。这就是所谓的内存泄漏。 如果超过了内存限制,则程序将通过抛出错误(即“ OutOfM

  • 问题内容: 我正在遍历String类API,由于子字符串方法与原始String共享相同的字符数组,因此似乎存在潜在的内存泄漏。 如果原始字符串很大,则子字符串返回的小字符串可以防止原始字符串(由大数组备份)被Java垃圾回收。 任何想法或我读错了API。 问题答案: 还有 就是 对内存泄漏潜在的,如果你把一个相当大的字符串的一个子并不能复印(通常是通过构造函数)。 请注意,自Java 7u6以来,