我的程序做什么:我在sqlserver上写值(我写了2 400 000次)
我的问题:没有足够的空间,但我正在使用32位计算机而且我无法强制JVM分配足够的空间(。
你有解决方案吗?或者你能指导我解决这个问题的方法。
我已经尝试过System.gc()。
我的代码:
int nul = 0;
int total = 0;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
System.out.println("Driver O.K.");
String url = "jdbc:sqlserver://BCNSDBA042\\DEV_CP1_CI_AS";
String user = "REMINDINTDATA";
String passwd = "REMINDINTDATA";
Connection conn = DriverManager.getConnection(url, user, passwd);
System.out.println("Connexion effective !");
Statement state = conn.createStatement();
File indexDirectory = new File("D:\\index\\IdxDOSSIER\\data\\index");
DirectoryReader r = DirectoryReader.open(FSDirectory
.open(indexDirectory));
int num = r.numDocs();
System.out.println("clean en attente");
state.executeUpdate("delete from Document_solr ");
System.out.println("clean effectué");
int i = 0;
String commande = null;
while (i < num) {
commande = "INSERT INTO Document_solr (DC_KEY) VALUES";
Document d = r.document(i);
for (int k = 0; k < 100 && (i + k) < num; k++) {
d = r.document(i + k);
if ((i + k) == num - 1) {
if (d.get("DC_KEY") != null) {
commande = commande + "(" + d.get("DC_KEY") + ")";
} else {
commande = commande.substring(0,
commande.length() - 1);
nul++;
}
total++;
} else {
total++;
d = r.document(i + k);
if (d.get("DC_KEY") != null) {
if (k != 99) {
commande = commande + "(" + d.get("DC_KEY")
+ ")" + ",";
} else {
commande = commande + "(" + d.get("DC_KEY")
+ ")";
}
} else {
nul++;
k--;
i++;
}
}
}
System.out.println("Fichier traiter : " + i);
System.out.println(commande);
state.executeUpdate(commande);
i = i + 100;
}
r.close();
state.close();
// result.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
我可以在两次或树时间执行我的程序吗?(无需再次运行)
编辑: 我用转储头运行垫子,它说泄漏记忆来自:
线程java.lang.Thread @ 0x24d60790 main保存局部变量,总大小为666 611 008(99,88%)字节。
内存累积在由“system class loader&gt;”加载的“java.lang.Thread”的一个实例中。