我正在处理一个应用程序来管理数据库。它被设计成服务器/客户端,服务器处理所有数据库的事务。OutOfMemoryException几个查询后
这有点是这样工作的:
- 当服务器启动时,它会打开一个套接字并开始监听端口。
当客户端启动时,它会搜索插座/端口,如果开启,服务器将启动一个新的线程:
while (true) { new Thread(new comm.Protocol(serverSocket.accept()).start(); }
一旦线程,服务器创建通信所需要的对象( ObjectInputStream
& ObjectOutputStream
),并等待客户端发送的登录信息。在接收时,服务器尝试创建一个新的连接:
Class.forName("com.mysql.jdbc.Driver");
connection=DriverManager.getConnection(dbName, username, password);
如果成功的话,它节省了连接,并不断循环在等待客户端的请求。通信由DTO完成,其中包含客户端的请求类型和查询所需的数据对象。服务器采用DTO并切换请求类型,执行请求的查询。然后,它设置在Plain Old Java Object
的形式,该机型的查询表,或multiresult查询的DTO一个java.util.ArrayList<POJO-Typed-Object>
,并将其发送回客户端的结果。
它显然工作正常,问题是,一些查询后,特意用行大量的那些,服务器应用程序运行的内存。
PreparedStatements
在使用后关闭,因此ResultSet
s,所以我不知道内存在哪里。
任何建议将不胜感激。
当你只有大疑问之一,它给太例外? – 2013-05-06 19:27:11
不,我可以在没有任何问题的情况下进行5或6个包含12,000行以上的查询,但是从这一点来看,它会在下一个例外情况下给出例外。 – Noe 2013-05-06 19:28:32
你确定线程正在退出吗?您为每个连接创建一个新线程,以便假定它们是自我退出的。 – Brandon 2013-05-06 19:30:46