优化-java代码中有个循环,数据量一大直接网页报500错误

问题描述

java代码中有个循环,数据量一大直接网页报500错误


求大神帮忙优化一下,10000数据还可以,但是数据一多网页就崩溃了,就是代码中的row++,加上去就不行了

解决方案

结果是内存益处了
那就是你的程序太耗费资源了。

那个获取page的方法:
1--Page对象村的东西太多了,很多何你写入单元格的数据没关系,
既然这块逻辑是大数据量的,为什么不拆分针对这块逻辑的结构呢?
使用Page造成了很大的内存浪费
在循环外部定义这个结构
List list = null

2--将方法的参数精简下
因为你一页的数据量10000时固定的,所以只要知道这个当前的count就够了
为什么不把方法签名写成下面的呢?
arrearA..Service.getArrearInfoByRow(row,"list,arreAmount",SqlO....)
只要四个参数就够了。
至于其他的参数对于这个xxxService来说,在生成这个Service的时候这个10000是知道的。
map,你第一行程序就有用map作为计算,应该在里面计算的同时保存住map的信息。

 方法参数越多,方法调用的成本越高,尤其是那些存有大量数据的对象作为方法参数时不可取的。

至于为什么要改成List呢?
首先:因为你那个Page对象里买的东西太多,很多何这块逻辑每关系,所以不要为了易于使用
就全部封装在一起,这样的对象占用资源厉害啊

其次每次调用一个方法都返回一个Page对象也不合适,返回肯定是new了,对象的空间没有复用
与其你返回一个Page,还不如在参数中定义一个page,这样这个方法不new了,每次都利用参数中的page对象的值。
你只要在循环开始给page来一个初始化就可以了
但是page仍然占用资源,使用这个List作为参数
提示:将大数据对象放到函数体内,函数执行完了会自动释放空间的。函数的返回采用轻便的数据结构存储

还有就是 list可以进行clear()操作。不用每次都new一个list

最后就是使用迭代器来进行循环

总结:
优化的目的就是:
1--避免大数据量的对象传入函数内部
2--不要动不动就返回一个对象,尤其是在多次循环中,这就是多次的new
不如将返回的对象传入参数中,使用完了之后还可以继续复用这个对象的内存

3--结合2,可以给对象定义一个clear操作,执行完成之后给对象的存储减负
这样继续使用的时候效率更高。

希望对你有帮助

解决方案二:

执行异步请求

http://stackoverflow.com/questions/11781508/handling-a-long-running-jsp-request-on-the-server-using-ajax-and-threads

解决方案三:

500的异常信息是什么呢?

解决方案四:

jvm 调优试试,应该是堆栈内存分配不够。

解决方案五:

http://www.codeproject.com/Articles/492789/Starting-and-Monitoring-a-Long-Running-Task-Using

时间: 2024-08-30 12:39:05

优化-java代码中有个循环,数据量一大直接网页报500错误的相关文章

java map中写入的数据量大,入库也慢导致浏览器假死

问题描述 java map中写入的数据量大,入库也慢导致浏览器假死 由于前台要选中8000行左右的记录,提交后写入到map中,然后再从map中取出后插入到相应的表中,这时非常费时.目前插入操作也是指提交,但是提交后,目前浏览器经常会碰到假死的现象,大家有好的办法解决吗? 解决方案 你的设计有问题,批量选择,在界面上应该提供单独的设计,不是展示全部8000的记录,而是允许用户根据字段的范围来选择,界面上用可以懒惰加载和预览的方式呈现数据. 解决方案二: 数据要进行分页操作,分批插入,分批显示 解决

poi处理excel大数据量的导入会报内存溢出

问题描述 poi处理excel大数据量的导入会报内存溢出 XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(fileName())); 就是单独执行这行代码都不行,报内存溢出,我把虚拟机都设置成最大了也溢出 差不多10万行吧 解决方案 poi大数据量excel导入 解决方案二: 可以参考这:poi的eventmodel写的大数据量的excel的读取程序.http://gaosheng08.iteye.com/blog/624

Contains模糊查询列,列中有一条数据为NULL,就报错

问题描述 Contains模糊查询列,列中有一条数据为NULL,就报错 Contains模糊查询列,列中有一条数据为NULL,就报错 list.Where(x => x.Contact_Phone.Contains(Request["phone"]) 三条数据,2条有phone,一条没有,报错,把另一条添加上就可以用

php iis mysql-用PHP实现excel数据导入数据库,但是提示500错误,服务器是IIS,求高手指点

问题描述 用PHP实现excel数据导入数据库,但是提示500错误,服务器是IIS,求高手指点 require_once ('PHPExcel.php');require_once ('PHPExcel/IOFactory.php');require_once ('PHPExcel/Reader/Excel5.php');if($_POST['leadExcel'] == ""true""){ $filename = $_FILES['inputExcel']['n

使用技巧:内部类和匿名类优化Java代码

技巧|优化 Java 1.1通过对Java语言规范进行修改,显著简化了一些实用结构的实现.在那些修改中,最引人注目的就是内部类和匿名类.如运用得当,它们可使程序更易理解和维护.下面来看看这些特性具体是如何工作的,如何正确使用它们,以及如何避免一些常见的错误. 内部类 简单地说,"内部类"是在另一个类的内部声明的类.从Java 1.1开始,你可在一个类中声明另一个类,这与声明字段和方法非常相似.包装了内部类声明的类就称为"外部类". 实际上,Java语言规范还允许你做

使用内部和匿名类优化Java代码

优化 Java 1.1通过对Java语言规范进行修改,显著简化了一些实用结构的实现.在那些修改中,最引人注目的就是内部类和匿名类.如运用得当,它们可使程序更易理解和维护.下面来看看这些特性具体是如何工作的,如何正确使用它们,以及如何避免一些常见的错误.    内部类    简单地说,"内部类"是在另一个类的内部声明的类.从Java 1.1开始,你可在一个类中声明另一个类,这与声明字段和方法非常相似.包装了内部类声明的类就称为"外部类".    实际上,Java语言规

使用 IBM 静态工具优化 Java 代码,第 2 部分: 分析错误报告

概述 BEAM 报告的结果文件是通过 build.xml 中 --beam::complaint_file 所定义的,在这 里,本文假设其为 BEAM-messages.BEAM-messages 记录着报出的所有代码缺陷,这些缺陷 分为 ERROR,MISTAKE 和 WARNING 三大类,严重程度依次递减.每一个具体的 ERROR, MISTAKE 和 WARNING 都代表着一个错误模式,本文接下来就通过实例分析理解其中的某些 重要错误模式,告诉读者在写 Java 代码时如何避免这些错误

使用 IBM 静态工具优化 Java 代码,第 1 部分: 工具入门

什么是 BEAM? 关于缩写 BEAM 的声明 处于表达简洁的目的,本文采用了工具名称的缩写 - BEAM,这只是工具全称 "Checking Tool for Bugs Errors and Mistakes"的文字缩写,而不是工具的名称. IBM Checking Tool for Bugs Errors and Mistakes(本文后面将采用其文字缩写 BEAM )是 IBM 开发的一个静态分析工具,可以用于分析并查找出 C, C++ 和 Java 代码中的一 些不容易发现的潜

用stack变量优化Java代码

java程序包含了大量的对象,我们需要了解它们是从哪里被访问的,变量存储于何处对程序的性能有显著的影响--尤其是某些需要被频繁访问的变量. 我们写一个Java类,在其内部方法中定义的局部变量或对象是存储在stack(堆栈)中的,且JVM是一种stack-based的,因此访问和操纵stack中的数据时性能最佳.而Java类的instance变量(这个类的field)和static变量是在constant pool(常量池)中存储和得到访问的.constant pool中保存了所有的符号引用(sy