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.nnError description:n" + eef.getMessage(), "Error when creating database file", JOptionPane.WARNING_MESSAGE, icon);
}

给定这么小的一段代码,并且没有堆栈跟踪,我只能说这么多,但根据这段代码的编写方式,我会做出一些假设。

这里的资源是打开的,从来没有关闭过,如果在这里发生这种情况,我可以想象代码中的其他地方也会发生同样的事情。如果是这样的话,那么很可能还有其他不安全的代码。

这意味着,在信息如此之少的情况下,我可以说的最好的情况是,如果代码已经运行了一段时间,那么可能是使用了资源,导致内存泄漏。如果这个程序已经启动和重新启动了多次,那么它可能没有被干净地关闭,这个程序的旧版本仍然存在。

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

最新更新