我正在开发一个管理数据库的应用程序。它被设计为服务器/客户端,服务器处理所有数据库的事务。
它有点像这样:
- 当服务器启动时,它会打开一个套接字并开始监听端口。
当客户端启动时,它会搜索套接字/端口,如果打开,服务器会启动一个新线程:
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
对查询表进行建模的形式,或java.util.ArrayList<POJO-Typed-Object>
用于 DTO 上的多结果查询的形式,并将其发送回客户端。
它显然工作正常,问题是,经过一些查询,特别是具有大量行的查询,服务器应用程序内存不足。
PreparedStatements
使用后关闭,ResultSet
s 也关闭,所以我不知道内存在哪里。
任何建议将不胜感激。