【发布时间】:2012-08-07 15:02:46
【问题描述】:
我正在运行一个具有 3 个线程的多线程应用程序:
- 主线程 - 存储对象的向量列表
- AdderThread - 将对象添加到此向量列表
- RemoverThread - 使用 vectorList.clear() 方法删除对象(同步)
应用程序运行良好,但几个小时后出现 OutOfMemoryError。
我生成了堆转储并使用 eclipse MAT 进行分析,它显示 vectorList 类占用了所有内存。
clear 方法是否释放被单个对象占用的内存?
如何解决这个问题?
【问题讨论】:
-
你确定你的
remove方法被调用了吗?能否在remove方法返回之前添加一个打印向量大小的日志来检查向量是否为空? -
是的,在 clear() 被调用后,它会将 Size 打印为 0 。我什至在使用 System.gc();循环中的语句与 3 秒睡眠仍然给出相同的错误
标签: java multithreading memory vector memory-leaks