首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

java 内存储器泄露的例子

2012-10-15 
java 内存泄露的例子下面的代码展示了一个有内存泄漏的程序。MapLeaker 在线程池中处理任务,并在一个 Map

java 内存泄露的例子
下面的代码展示了一个有内存泄漏的程序。MapLeaker 在线程池中处理任务,并在一个 Map 中记录每一项任务的状态。不幸的是,在任务完成后它不会删除那一项,因此状态项和任务对象(以及它们的内部状态)会不断地积累,其实这个东西也不算实际意义上的内存泄露,只是创建的对象一直被强引用,而没有释放,时间久了,内存就不够用了而已。呵呵

package hello;import java.util.Collections;import java.util.HashMap;import java.util.Map;import java.util.Random;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;     public class MapLeaker {            public ExecutorService exec = Executors.newFixedThreadPool(5);            public Map<Task, TaskStatus> taskStatus = Collections.synchronizedMap(new HashMap<Task, TaskStatus>());            private Random random = new Random();            private enum TaskStatus { NOT_STARTED, STARTED, FINISHED };            private class Task implements Runnable {            private int[] numbers = new int[random.nextInt(200)];            public void run() {            int[] temp = new int[random.nextInt(10000)];            taskStatus.put(this, TaskStatus.STARTED);//            doSomeWork();            taskStatus.put(this, TaskStatus.FINISHED);            }            }            public Task newTask() {            Task t = new Task();            taskStatus.put(t, TaskStatus.NOT_STARTED);            exec.execute(t);            return t;            }}

热点排行