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