日期:2014-05-17  浏览次数:20843 次

请教大家:关于java的堆创建的问题
在linux中,使用top命令查看内存使用状态:看到如下:

Mem: 16401408k total, 14070060k used, 2331348k free, 22532k buffers
Swap: 8185076k total, 168k used, 8184908k free, 8747964k cached

为什么当我使用java读取文件将文件内容存入对象中时,堆会增加红色部分的数值,并且在红色部分增加到一定程度时,大概到total时,整个tomcat会崩溃掉。服务器如何配置能够让java创建更大的堆内存,或者代码上是否能够改进?
请各位大牛不吝赐教,小弟愧领~

------解决方案--------------------
是不是你linux机器的内存不够啊,系统内存不够,tomcat申请不到内存自然就无法运行了。
------解决方案--------------------
使用java读取文件将文件内容存入对象,当你把所有文件都放在这个对象,但这个对象无法被回收,自然全部是积压在内存中这个对象的空间上,最后导致内存消耗完。

你先确定你是否把文件全部留读取到了一个不被释放的对象上。
是否可以每次读取一部分处理完成再读取下一部分(既缓方式读取)。
------解决方案--------------------
不是服务器内存的问题,也不是OS内存的问题,看看你自己哪内存泄露,是不是有常驻内存的数据,不要扔太多东西进去了!还有文件处理,谨慎