风也温柔

计算机科学知识库

Android开发者内存泄漏的主要原因及解决办法(一)

  一、概述

  什么是内存泄漏?如果GC无法回收内存中不再使用的对象,则定义为内存有泄露

  二、详解

  出现内存泄漏的主要原因:

  1. 未关闭的资源类

  2.未正确实现equals()和hashCode()

  3.非静态内部类

  4.重写了finalize()的类

  5.针对长字符串调用String.intern()

  6.ThreadLocal的误用

  7.类的静态变量

  1. 未关闭的资源类。当我们在程序中打开一个新的流或者是新建一个网络连接的时候,JVM都会为这些资源类分配内存做缓存,常见的资源类有网络连接,数据库连接以及IO流。值得注意的是,如果在业务处理中异常,则有可能导致程序不能执行关闭资源类的代码内存泄露的例子java,因此最好按照下面的做法处理资源类

  <pre>
`public void handleResource() {

try {
    // open connection
    // handle business
} catch (Throwable t) {
    // log stack
} finally {
    // close connection
}
pre>

  2.未正确实现equals()和hashCode()。

  内存泄露的例子java_java堆外内存 泄露_内存泄漏和溢出例子

  假如有下面的这个类

  <pre data-tool="mdnice编辑器">
`public class Person {
    public String name;
    
    public Person(String name) {
        this.name = name;
    }
}
`</pre>

  并且如果在程序中有下面的操作

<p><pre data-tool="mdnice编辑器">
@Test
public void givenMapWhenEqualsAndHashCodeNotOverriddenThenMemoryLeak() {
    Map map = new HashMap();
    for(int i=0; i