Java性能问题: Need to iterate more than 8 million records with a target-branch check

标签 java performance function

我们有一个处理平面文件并(仅进行几次验证)插入数据库的系统。

这段代码:

//可以有800万行代码

for(String line: lines){
   if (!Class.isBranchNoValid(validBranchNoArr, obj.branchNo)){
    continue;
   }
   list.add(line);
 }

isBranchNoValid 的定义:

//数组长度只能在2到5之间

public static boolean isBranchNoValid(String[] validBranchNoArr, String branchNo) {
  for (int i = 0; i < validBranchNoArr.length; i++) {
    if (validBranchNoArr[i].equals(branchNo)) {
        return true;
      }
       }
    return false;
    } 

验证是在行级别进行的(我们必须过滤或跳过数组中没有 branchNo 的行)。早些时候,情况并非如此(过滤器)。

现在,高性能退化正在困扰着我们。 我理解(可能是我错了)这种重复的函数调用会导致大量的堆栈创建,从而导致非常高的GC调用。

我想不出一种方法(是否有可能)来执行此过滤器而不会造成性能下降的高昂成本(有一点差异就可以了)。

最佳答案

这肯定不是堆栈问题,因为您的函数不是递归的,调用之间堆栈中不会保存任何内容;每次调用后,变量都会被删除,因为不再需要它们。

您可以将有效数字放入一组并使用该数字进行一些优化,但就您的情况而言,我不确定它会带来任何好处,因为您最多有 5 个元素。

关于Java性能问题: Need to iterate more than 8 million records with a target-branch check,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55939802/

相关文章:

xml - 文化特定文本/翻译映射的外部 XML

oracle - 在 PLSQL 中使用嵌套函数的正确方法是什么?

java - JDSL,图形库——它在哪里?

java - 使用 getTableCellRendererComponent 更改 JTable 单元格颜色 没有任何反应

java - JVM 能够进行简单的递归调用预计算吗?

MySQL查询来计算多个表中的所有记录

php - 如何过滤函数参数

java - Groovy的扩展模块与java的继承对比

performance - 分散数组中的重复项

php - 如何确定 AJAX 应用程序的哪一部分导致速度变慢?