我有一个应用程序在Mac OS X上使用this jdbc-driver将一些数据(大约15mb在80k元组中)写入SQLite数据库。这是使用事务完成的,其中最大的包含大约45k个插入进入一张桌子。在分析应用程序时,有几件事情似乎很奇怪:
System.in.read()
在开头暂停应用程序,则进程分配的内存会持续增长。那是为什么?感谢您的帮助。
答案 0 :(得分:2)
内存使用中的拼图模式是由于通过RMI传输的分析结果。从程序中过滤实际内存分配确实非常令人困惑和恼人。请参阅VisualVM profiling is polluting results以了解如何过滤这些内容: - )
答案 1 :(得分:0)
关于你的第一个问题,你有多长时间观察到缓慢的增长。当Java进程中的内存使用处于静止状态时,您通常会看到锯齿模式的发展。您是否在同一时间片中看到任何GC?如果没有,那么更多的证据支持这个想法。
对于第二个问题,如果没有更多信息,确实很难说。由于时间窗口发生变化,应用程序必须花时间报告数据和进行正常工作等,因此通常会期望应用程序行为因打开配置文件而有所不同。可能是在转换配置文件时on,更多内存分配发生,因为您的代码现在已经过检测,这会触发GC,从而降低堆使用率。关闭分析时,尝试在应用程序中执行System.gc()并告诉我们堆使用情况报告的内容。