我有一个应用程序,我需要在数据库中存储很多事件。这些事件的发生频率为5000事件/分钟,事件总数可达数百万。
我正在使用c3po连接池。我打算做的是**从应用程序池中获取一个连接**并使用相同的连接来保存所有事件,如下所示:
Persistor persistor = new Peristor(conn)//注入上面创建的连接。
persistor.persistEvent(Event e){ conn.write(E); }
语句和结果集在每次写入后都会关闭,但是我没有在每次持久化后关闭连接(将其释放回池)。而是在应用程序停止时关闭连接。
我运行了应用程序,在持续大约600,000个事件之后,我使用了一个heapdump(使用:jmap -dump:format = b,file = test-dump.hprof [PID])来检查堆中发生了什么。
我可以看到有一个巨大的对象" com.mchange.v2.c3p0.impl.NewPooledConnection"消耗500 MB的堆)。在分析对象时,我可以看到它包含同一对象的嵌套对象的递归(com.mchange.v2.c3p0.impl.NewPooledConnection)。
所以,问题是,对象是否巨大,因为我在每次写入后都没有将连接返回到池中,或者我做错了什么?