我正在研究一些涉及将邮政编码,城市和国家存储在一起的J2EE项目.我们开发了一个Java类来处理每个国家文件的集成(包含每个邮政编码和每个城市).问题是,对于一些国家(英国,荷兰......),文件非常紧凑(400,000到800.000行).
我有一个while()
循环读取下一行,获取信息并将其存储到我的数据库中.问题是,对于1000或10.000的第一行,这个过程很快,非常快,然后每次进入循环时似乎都在减慢,然后恰好抛出HeapSpaceOverflowException
150.000行之后.
我首先想到一些对象不是垃圾收集并且减慢了我的算法,但我无法弄清楚哪一个.此外,当我在我的PC上运行此算法时,JConsole告诉我堆空间定期清理(似乎是垃圾收集),但过程仍然更慢更慢...
以下是该方法的代码:
FileReader fr = new FileReader(nomFichier);
BufferedReader br = new BufferedReader(fr);
int index = 0; String ligne; String codePostal; String nomVille;
String codePays; PPays pays; String[] colonnes;
while ((ligne = br.readLine()) != null)
{
System.out.println("line "+ ++index);
colonnes = ligne.split(Pattern.quote(";"));
codePostal = colonnes[9];
nomVille = colonnes[8];
codePays = colonnes[0];
pays = this.pc.getByCodePays(codePays);
this.pc.getByCodePostalAndVilleAndINSEE(codePostal, nomVille, pays.getNomPays(), "");
}
Run Code Online (Sandbox Code Playgroud)
变量this.pc
通过@Inject注释注入.
有人可以帮我弄清楚为什么这段代码变得越来越慢?
非常感谢.
编辑:为了完成,我添加了get...()
方法的代码:
public Codepostalville getByCodePostalAndVilleAndINSEE(String codePostal, String ville,
String pays, …
Run Code Online (Sandbox Code Playgroud)