我现在遇到一个问题:
为了节约数据的计算时间,我需要先把数据库中的数据都取出来,放在内存中。
再计算这些数据。
计算一天的数据,list的程度大概越有14000条,HashMap大概也是14000条数据。
如果计算一个月的数据,理论上list和HashMap的长度都会达到14000*30=420000条
但计算的时候,过很长时间后总会提示一个错误:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
这个意思应该是虚拟机的内存满了吧
所以我猜是不是这个list和HashMap的长度太长了对于这个问题 应该怎么解决?
为了节约数据的计算时间,我需要先把数据库中的数据都取出来,放在内存中。
再计算这些数据。
计算一天的数据,list的程度大概越有14000条,HashMap大概也是14000条数据。
如果计算一个月的数据,理论上list和HashMap的长度都会达到14000*30=420000条
但计算的时候,过很长时间后总会提示一个错误:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
这个意思应该是虚拟机的内存满了吧
所以我猜是不是这个list和HashMap的长度太长了对于这个问题 应该怎么解决?
如果一定要在内存算的话,运行参数里加大jvm内存好了。
比如
A中包括 : a,b,c,d,e.....
a中每天都会生成288个值(b,c,d....都会每天新生成288个值)计算逻辑:要把a中的这一天的第一个值,加上b中这一天的第一个值,加上c中。(A中所包含的所有元素的这一天的第一个值相加) 除以 A的长度 得出一个值来 为rest1再把a,b,c,d...中这一天的第二个值按上面的过程计算,得出rest2
。
这样吧A中所有的元素计算后,把rest1,rest2,rest3.排序返回最大的25个
还有一点,你可以直接用数据库来排序然后插入的。(简单的计算好像都可以)
oracle里面的 hs/sql(好像是这个名字,可能有差错) 可以完成这个人物。。其他数据库按照顺序取出来肯定是可以的。(计算后数据)
比如建立一些view什么的进行一些预处理,
或者写存储过程,通过java调用来解决。否则测试的时候OK,真正运行起来的话,
很多陷阱就会出现了good luck
运行机器的内存有多大?虚拟机默认内存修改没?就是运行时-XmxXXXm设了没?关于过大的内存内存丢失问题,JVM是不保证的,但是2,3个G内不会有什么问题,更大的话,考虑采用内存数据库产品吧?但是这么大的数据量考虑的不是速度问题而是可靠性问题了。
使用sql就可以计算出这25个值来,然后再把每天的25个值存到数据库中,这样效率就提高了
没办法,后来又改成一天一天进行数据分析了。
这个还得从逻辑或技术上解决
我现在还是像17楼的哥们说的那样 按天来统计的