由于做实验遇到处理大量数据,这时将数据不断加入hashtable中,会出现内存溢出问题。请问该如何解决,有没有什么好的方法?
解决方案 »
- 算逻辑问题吧!
- xml解析问题!急
- 问一个JavaScript中很easy的函数问题,在线等
- 急!该怎么加?
- 主题:有没有人用过httperf,谁知道怎么用httperf的结果生成图像?
- 高手2分钟搞定,新手几天搞不定,请问下struts+hibernate+spring的流程!!~以及配置!
- 有没有一个快速查询Java API的工具?类似msdn的文档也可以
- 请启动资源管理器后,再运行任一JFrame程序,窗口最小化后再恢复,看看内存消耗值的变化大不大,还能不能恢复到最小化前那么大
- 怎样把list中用get取出来的元素变为可运算的?
- Applet在页面中运行时,连接数据库抱错access denied ,请问如何解决?
- 求助:为什么我在eclipse中启动tomcat时会跳出错误对话框???
- 这种情况下classpath应该怎样设置?
严重关注!!!!
如楼上所说;
java -Xmx
而在虚拟机层面,在windows平台下,进程的空间一共是 4g, 系统用掉了2g,还剩下2g给jvm用
,对于服务器可以加一个什么参数把用户进程空间调到3g,但是再怎么调也是有限的。(jvm本身也要调整才能用那么大的空间),unix和linux平台下就不太清楚了。关于你的问题,基于这两个原因,如果估算你用到的数据量太大,超出这些空间,那么就需要采用变通方法。毕竟操作系统提出虚拟内存这个变革性的概念,并不是承诺给程序员无限的空间。
你可以借鉴操作系统的交换分区的做法。自己封装一个hashtable类,根据一定的策略把那些不用的数据置换到外存,需要用到的时候再换回来,没办法,只能用时间来换取时间了。嘿嘿,还有一个方法,就是等64位操作系统出来。
如果你想不改变算法,而容纳下现有的数据,那么如前面所说,java -Xmx,前提是你有足够多的内存。
如果你想通过改变算法解决这个问题,那么你得描述你弄这么多数据到内存干什么,数据量到底多大。用ORM对JDBC做封装就可能出现这个问题,因为本来直接使用resultset,无论结果集有多大都不会有内存问题,因为resultset每次只预取一部分数据,而ORMapping可能涉及到把一个结果集的所有记录全部转换成OBJECT,那么就会出现你说得这个问题,一般如果是在WEB上应用,比较好的方法还是采用分页,减少数据量。看看你是什么问题。
sjjf(水晶剑锋) jinxfei(周华健、言兴朋、茅威涛) 那我先说我的了。
我不是用来分页用的, 我把oracle的数据提取出来,生成html静态页面用的。
java -Xmx (应该是这个参数把)设置最大stack 内存
开大JVM的内存或者用SQL来先分页,然后循环将分页的数据送入HashMap中,每次循环头要new HashMap()一次。
也可以用ArrayList()来试试,它默认可以存4.5M的数据,应该是对象中最大的。
比如,如果你注重用户的对 系统的响应时间的 体验,那么取一点数据就将其显示出来的做法就较优,(比如所谓的分页机制)
但是,如果要处理的是从一大堆基础数据里面中取数据统计。那就等处理完所有的数据才能给用户结果,而且显示统计结果极少,那么所谓的分页倒没有什么用处。不会明显的提高系统响应时间。我不明白你为什么要生成html,因为如前面所言 sence不够明确。
但是比较正确的处理这类问题的方法是建立数学模型,把你环境涉及因素放入这个模型内。
然后根据客户需要或者某些需要建立目标评价函数。也许说的太过于抽象,而且其中还有很多求解分析的技巧,但是在这种信息程度只能这样泛泛而论了。实际的模型里,每一步里都应该有量化数据,才能够推算出好的设计结构和算法处理过程。数学是个有用东西,同时也是一个不是三言两语就能说明白的东西。
然后用xsl和xml相接合的方式,产生一个html页面.
并不一定非要全部读入内存才能处理并且jvm的内存使用是有最大限制的,并且jvm作为一个进程,在window系统中最大只能有2G的内存使用(通过设置,可以达到更多,但好像不会超过3G吧),所以,把数据都写到内存,不是个好办法