java中循环外定义变量与循环内定义变量占用内存与效率问题?
本帖最后由 Inflexible_lin 于 2013-01-15 09:53:29 编辑 当数据量很大时,即内层循环次数达到百万级以上时,是按现在这样定义变量好呢?
还是把变量定义放到图中蓝色部分???
请大师帮忙解答一下,个人觉得是目前这样定义比较好!
Sheet sh = null; //sheet
Row row0 = null; //每个sheet的标题
Row row = null;//具体的行变量,避免多次定义
Cell cell = null;//单元格变量,避免多次定义
for(int i=0;i< sheet_num;i++){
sh = wb.createSheet();
row0 = sh.createRow(0);
//生成每个sheet的title
for(int cellNum = 0,colLength =colTitles.length; cellNum < colLength; cellNum ++) {
cell = row0.createCell(cellNum);
cell.setCellValue(colTitles[cellNum]);
cell.setCellStyle(createStyle(wb));
}
//每个SHEET有最多100万行数据
for(int rowNum = 1; rowNum <= maxSheetRowNum; rowNum++) {
if(!rs.next()){
break;
}
//System.out.println(rowNum);
row = sh.createRow(rowNum);
for(int cellNum = 0,colLength =colTitles.length; cellNum < colLength; cellNum ++) {
cell = row.createCell(cellNum);
cell.setCellValue(rs.getString(cellNum + 1));
}
//每当行数达到设置的值就刷新数据到硬盘,以清理内存
if(rowNum % rowAccess == 0){
((SXSSFSheet)sh).flushRows();
}
}
//最后不足100条时写入
((SXSSFSheet)sh).flushRows();
} java 内存
[解决办法]
我个人也习惯用红色部分,毕竟少了很多次的申请空间,入栈和出栈的操作
不过,自己在编程的时候要注意不让上一次的结果影响到下一次循环
比如上一次 a = 3, 当下一次循环在给a赋值的时候出了错误,而你捕获了错误
缺没修正a的值,程序继续执行,那么这时候a=3还成立,可能就会有问题了,
如果是每次都定义,那就不存在这样的问题。
[解决办法]
循环外好,避免重复分配栈空间。
[解决办法]