大家来帮我看看这个 java 内存问题吧,我快崩溃了。

2014-08-31 21:53:55 +08:00
 buptlee
程序的开始是读入一个文件里的数据,数据的格式是:
每一行为三个字段,例如:
2,3,0
并且1-50行的第一个数字相同,51-100行的第一个数字相同,以此类推。
一共是1.2亿行。我把它读到一个字典里面。我用的数据结构是:HashMap<Integer,LinkedList<Node>>
键是每一行的第一个数字,值是一个LinkedList,Node有两个字段:
Node{
int ID;
int distance;
}
分别是每一行的第二个数字和第三个数字。也就是说每一行会产生一个node。
然后每50行放入一个LinkedList,再put进hashmap里面。我估算了一下,需要的内存是:
0.12G*(4+4+4)=1.44G
4是int类型占的字节数。加上node封装,linkedlist的使用可能会需要一些额外的内存,我给java虚拟机分配了6G的内存上线。
程序运行的时候,发现开始读入的速度还是很快的,内存涨的很快,但cpu一直维持在较低水平,大概40-50%,但是当读入到2300万行的时候就卡主了,多次运行到这时都停住了,任务管理器显示java程序只占用了2.3G的内存,但很快cpu使用率达到了100%。
我想问下大家,这是什么原因呢,是因为我使用了Node封装和LinkedList导致需要更多的内存吗。需要多多少呢。而且为什么我为这个java程序分配了6g的内存,就算是内存不足,也不应该卡在2.3G这个地方啊。难道是我分配内存的方法不对?大家都是怎么给某个java程序单独分配内存的?
拜谢各位啊。
6262 次点击
所在节点    Java
21 条回复
buptlee
2014-09-01 10:34:41 +08:00
@stevenyou cool! I will have a try as you say! Thanks bro.=.=

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/130974

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX