stevenyou
2014-09-01 09:27:39 +08:00
楼主对内存的估算不太正确, 没有算进去java object , 和HashMap 的overhead.
一个空object 会用16 bytes, Node 里有两个int, 也就是一个Node 会在Heap里用掉32 bytes
一个空LinkedList里应该有4个private fields 会占用 (4+2) * 8 = 48 bytes
一个LinkedList用的memroy 是 48 + 24* size_of_list , 你的size 是50 , 也就是 1248 bytes
HashMap 的内存占用是 32 * SIZE + 4 * CAPACITY bytes , 你的size 是 120,000,000 / 50 . default load factor 是0.75, capacity 就是 (120,000,000 / 50) / 0.75.
估算一下, 一共会用7个多G 的内存。
另外hashmap rehash 是很快的,这个数据量不是很大, cpu没有吃满应该是别的原因,比如disk io, 看一下你top 里的 wa 是多少。
楼主也可以把代码贴出来给大家看看,分析一下。