我写了一个小的java程序,它使用简单的JDBC调用从DB2数据库加载数据.我正在使用select查询获取数据并使用java语句来实现此目的.我有正确关闭的语句和连接对象.我使用64位JVM进行编译和运行程序.
该查询返回了5200条记录,每行有24列,这需要我大约4分钟来加载Unix中的完整数据(具有多处理器环境).我使用HashMap作为数据结构来加载数据:Map<String, Map<String, GridTradeStatus>>.bean GridTradeStatus是一个简单的getter/setter bean,里面有24个属性.
程序所需的内存非常高.Java堆大小上升到5.8 - 6GB以加载完整数据,而实际使用的堆大小保持在4.7 - 4.9GB之间.我知道我们不应该将这么多数据加载到内存中,但我的业务需求只是这样.
问题是,当我将我的表的整个数据放在一个平面文件中时,它大约相当于~1.2GB.我想知道为什么我的java程序消耗的内存是实际大小的4倍.