这太奇怪了。我在尝试创建文件时遇到内存不足异常。但是,磁盘上有足够的空间来创建文件。
应用程序在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);
}
答案 0 :(得分:0)
我只能说这么多代码并没有堆栈跟踪,但根据代码的编写方式来判断我会做一些假设。
资源正在打开,永远不会在这里关闭,如果发生这种情况,我可以想象在代码中的其他地方也会发生同样的事情。如果是这种情况,则可能存在其他一些不安全的代码。
这意味着有了这么少的信息,我能说的最好的是,如果代码已经运行了一段时间,那么你可能会在某处使用资源。如果这已经启动并重新启动了几次,那么它可能没有被彻底关闭,并且这个程序的旧版本正在徘徊。
为了正确解决这个问题,我们需要更多代码和/或堆栈跟踪。可能在机器上运行jps也会有所帮助,否则我们没有足够的信息可以说更多。