繁体   English   中英

解释VisualVM性能分析会话的结果

[英]Interpreting the results of a VisualVM profiling session

我有一个应用程序,使用Mac OS X上的 jdbc驱动程序将一些数据(约8万个元组中的15mb数据)写入SQLite数据库。这是使用事务完成的,其中事务最大,其中一个表包含约4.5万个插入。 对应用程序进行性能分析时,似乎有些奇怪:

  1. 如果我从一开始就使用System.in.read()暂停应用程序,则进程分配的内存将保持缓慢增长。 这是为什么?
  2. 当应用程序运行时,VisualVM监视器中使用的堆空间始终约为80mb。 但是,在对内存使用情况进行性能分析时,我总共得到大约10mb。 谁能解释这种差异?

谢谢你的帮助。

内存使用中的拼图模式是由于分析结果是通过RMI传输的。 从程序的实际内存分配中过滤出来确实是非常令人困惑和烦人的。 请参阅VisualVM分析是否污染了结果,以了解如何过滤这些结果:-)

关于您的第一个问题,您观察了多长时间的缓慢增长。 当Java进程中的内存使用量处于静止状态时,通常会看到锯齿状模式的发展。 您是否看到同一时间段内发生任何GC? 如果没有,那就是更多的证据支持了这个想法。

对于第二个问题,如果没有更多信息,很难确定。 通常,您希望打开性能分析时,应用程序的行为会有所不同,因为计时窗口会发生变化,应用程序必须花时间报告数据并完成其正常工作,等等。可能是,如果打开性能分析,则会发生更多的内存分配,因为您的代码现已检测到,这会触发GC,从而降低堆使用率。 禁用概要分析后,请尝试在应用程序中执行System.gc()并告诉我们您的堆使用情况报告什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM