运行以下代码时,我收到错误 java.lang.OutOfMemoryException:java heap space
我的代码是:
public class openofficeupdate {
String databaseurl="C:\\mydbdir\\location\\salesforce"; // Path of the base after renaming and extraction
openofficeupdate() throws ClassNotFoundException, SQLException{
System.out.println("Entered into constructor");
Connection connection=null;
Statement statement=null;
try{
Class c=openofficeclass();
System.out.println("Class name set");
Connection cntn=createConnection(databaseurl);
connection=cntn;
System.out.println("connection created");
Statement stmt=createStatement(cntn);
statement=stmt;
System.out.println("Statement created");
executeQueries(stmt);
System.out.println("Query executed");
closeStatement(stmt);
System.out.println("Statement closed");
closeConnection(cntn);
System.out.println("Connection closed");
}catch(Exception e){
System.out.println(e);
closeStatement(statement);
System.out.println("Statement closed");
closeConnection(connection);
System.out.println("Connection closed");
}
}
public static void main(String args[]) throws ClassNotFoundException, SQLException{
new openofficeupdate();
}
private Class openofficeclass() throws ClassNotFoundException {
return Class.forName("org.hsqldb.jdbcDriver");
}
private Connection createConnection(String databaseurl) throws SQLException{
return DriverManager.getConnection("jdbc:hsqldb:file:" +databaseurl,"sa","");
}
private Statement createStatement(Connection cntn) throws SQLException{
return cntn.createStatement();
}
private void closeStatement(Statement stmt) throws SQLException{
stmt.close();
}
private void closeConnection(Connection cntn) throws SQLException{
cntn.close();
}
private void executeQueries(Statement stmt) throws SQLException{
System.out.println("Going to execute query");
int status=stmt.executeUpdate("insert into \"Mobiles\" values(9874343210,123,'08:30:00','09:30:06')");
12','2010-12-14','c','Casula')");
System.out.println("Query executed with status "+status);
}
}
我正在使用NetBeans IDE ...有没有选项来控制这种错误?
答案 0 :(得分:4)
如果你在不知道原因的情况下继续增加,你的问题可能无法解决。所以我建议你找到问题的根本原因并从那里解决,
这些是可以用于analyze heap
的一些免费工具,可以帮助您摆脱OutOfMemoryError
:
Visualgc :
Visualgc代表Visual Garbage Collection Monitoring Tool,您可以将它附加到已检测的hostspot JVM。 visualgc的主要优势在于它以图形方式显示所有关键数据,包括类加载器,垃圾收集和JVM编译器性能数据。
目标JVM由其虚拟机标识符标识,也称为vmid
。
Jmap : Jmap是JDK6附带的命令行实用程序,允许您在文件中获取堆的内存转储。它易于使用,如下所示:
jmap -dump:format=b,file=heapdump 6054
此文件指定内存转储文件的名称,即“heapdump”,6054是Java进度的PID。您可以使用“ps -ef”或Windows任务管理器或使用名为“jps”的工具(Java虚拟机进程状态工具)找到PDI。
Jhat : Jhat之前被称为hat(堆分析器工具),但它现在是JDK6的一部分。您可以使用jhat分析使用“jmap”创建的堆转储文件。 Jhat也是一个命令行实用程序,您可以从cmd窗口运行它,如下所示:
jhat -J-Xmx256m heapdump
这里将分析文件“heapdump”中包含的内存转储。当你启动jhat时它会读取这个堆转储文件,然后开始在http端口上监听,只需将浏览器指向jhat正在监听的端口7000,然后你就可以开始分析堆转储中存在的对象了。
Eclipse内存分析器: Eclipse内存分析器(MAT)是一个从eclipse基础开始分析java堆转储的工具。它有助于查找类加载器泄漏和内存泄漏,并有助于最小化内存消耗。您可以使用MAT来分析承载数百万个对象的堆转储,它还可以帮助您提取内存泄漏的可疑内容。
VisualVM :VisualVM是一个集成了多个命令行JDK工具和轻量级分析功能的可视化工具。它专为生产和开发时间使用而设计,进一步增强了Java SE平台的监控和性能分析功能。
答案 1 :(得分:3)
在Netbeans 7.0中:
您可以右键单击该项目,然后选择Properties
。
点击Run
类别,然后在VM Options
例如,在您的情况下,按照rm5248的建议粘贴:-Xmx512m
(512Mb)
您可以阅读Playing with JVM / Java Heap Size了解更多信息。
答案 2 :(得分:1)
如果堆空间不足,则需要增加堆大小。了解您使用多少内存的方法是运行适当的测试和分析。也就是说,有一些更简单的方法可以让你的应用程序启动和运行......以下是人们用java程序修复或解决内存问题的三个常见问题。
答案 3 :(得分:0)
将-Xmx512m
作为参数传递给JVM。这将使您的最大堆大小增加到512 MB。有关其工作原理的详细信息,请参阅http://download.oracle.com/javase/7/docs/technotes/tools/windows/java.html。
关于如何在Netbeans中设置它,我不确定;如果我没记错的话,有一个设置,用于运行程序以传递程序的参数,以及JVM的参数。