问题是这样的:
我从一个点检索纬度和经度并将其存储到agent
类中。
该类具有成员id,纬度和经度以及相关的功能。
现在在Java应用程序的开头,它从本地MySQL表中读取所有行(具有坐标值)并将其存储到这些agent
变量的arraylist中。然后它读取这个arraylist并调用必要的函数并在最后绘制一个图形。
这适用于8K - 10K行的表,但是对于另一个包含大约200,000行的表,它会在java中开始给出Heap size错误。
我正在考虑在每次需要代理坐标时更改代码以访问db。这应该减少所需的内存吗?但是,有许多循环使用此Iterator
ArrayList的agent
。我仍然在解决如何处理这个问题。
那么哪个更好的选择 - 每次从表中读取或按原样继续并增加java内存分配? 谢谢你的阅读。
答案 0 :(得分:1)
尝试仅根据需要加载数据。我们没有太多信息,但我假设用户不需要同时查看/交互所有10,000个数据点。除了设备屏幕大小的物理限制外,实际上用户将被这么多信息所淹没。
我会尝试实现一个分页系统。同样,我不知道您使用Agent
类的内容,但尝试只加载向用户显示的Agent
个。{/ p>
答案 1 :(得分:0)
您的策略存在严重缺陷:从磁盘读取大量数据,然后存储在数据库的内存中,发送到Java应用程序,最后将其放入JVM的内存中。这需要很多时间和资源。
使用游标,然后你就可以从db读取并同时在java app中迭代结果集,而JVM不必分配这么多内存。
一些文档: