java.lang.OutOfMemoryError:Java堆空间

时间:2015-07-06 11:15:00

标签: java sql-server eclipse space head

我的程序做什么:我在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”的一个实例中。

0 个答案:

没有答案
相关问题