【发布时间】:2015-09-08 19:44:59
【问题描述】:
我有一个生成记录的数据生成代码,每条记录都有多个用户选择的字段。为了加快进程,我将任务拆分为批量创建记录,并行创建记录
例如:如果我想生成 10k 条记录,我将其拆分为 5 个任务
喜欢说
Task 1 : create record from 1-2k
Task 2 : create record from 2001-3k
...
Task 5 : create record from 8001-10k
我希望每个线程都将记录存储在容器中。当容器被填充到初始 1k 条记录的限制时,一个等待导出数据的任务将开始按顺序删除记录。
我的选择是使用 Hash Map,因为序列很重要,但它根本没有内存效率,因为即使 Map 为空超过 50%,Map 在堆上占用的大小保持不变,直到 Map 为 GC。
那么考虑到我的上述情况,什么最适合容器?
【问题讨论】:
-
HashMap不保留序列。为什么不使用数组? -
我在 HashMap 中添加索引作为键
-
那么为什么不使用以索引为隐式键的数组呢?
-
也在数组中,如果我开始删除对象,内存不会被释放。只有GC时才会释放
标签: java multithreading memory collections