Java异常内存不足

时间:2013-12-02 09:12:16

标签: java

这太奇怪了。我在尝试创建文件时遇到内存不足异常。但是,磁盘上有足够的空间来创建文件。

应用程序在Citrix上运行(不确定是否相关)。

我不知道从哪里开始调试这个,因为我可以清楚地看到磁盘上有空间。

我正在尝试创建的文件是4 KB,名为history.db

这里有什么想法吗?

这是我用来创建文件的代码:

try {
    String databaseFileLocation = "";
    String fileSeparator = System.getProperty("file.separator");
    String homeDir = System.getProperty("user.home");
    File myAppDir = new File(homeDir, ".imbox");
    if (System.getProperty("os.name").contains("Windows")) {
        databaseFileLocation = "jdbc:sqlite:" + myAppDir + fileSeparator + "history_" + agentID + ".db";
    } else if (System.getProperty("os.name").contains("Mac")) {
        databaseFileLocation = "jdbc:sqlite:history_" + agentID + ".db";
    }
    Class.forName("org.sqlite.JDBC");
    Connection conn = DriverManager.getConnection(databaseFileLocation);
    Statement stat = conn.createStatement();
    stat.executeUpdate("CREATE TABLE IF NOT EXISTS visitorInfo (channelID text UNIQUE, currentPage, userCountry, userCity, org);");
    stat.executeUpdate("CREATE TABLE IF NOT EXISTS chatHistory (channelID, sender, message, recipient, time);");
    stat.executeUpdate("ALTER TABLE visitorInfo ADD COLUMN visitorTag;");
} catch (Exception eef) {
    eef.printStackTrace();

    final ImageIcon icon = new javax.swing.ImageIcon(getClass().getResource("/resources/warning_icon.gif"));
    JOptionPane.showMessageDialog(null, "Failed to create database file.\n\nError description:\n" + eef.getMessage(), "Error when creating database file", JOptionPane.WARNING_MESSAGE, icon);

}

1 个答案:

答案 0 :(得分:0)

我只能说这么多代码并没有堆栈跟踪,但根据代码的编写方式来判断我会做一些假设。

资源正在打开,永远不会在这里关闭,如果发生这种情况,我可以想象在代码中的其他地方也会发生同样的事情。如果是这种情况,则可能存在其他一些不安全的代码。

这意味着有了这么少的信息,我能说的最好的是,如果代码已经运行了一段时间,那么你可能会在某处使用资源。如果这已经启动并重新启动了几次,那么它可能没有被彻底关闭,并且这个程序的旧版本正在徘徊。

为了正确解决这个问题,我们需要更多代码和/或堆栈跟踪。可能在机器上运行jps也会有所帮助,否则我们没有足够的信息可以说更多。