当jmap进行内存转储时,我的java应用程序是否继续运行?
解决方法:
您的申请已停止.获得准确堆转储的唯一实用方法是在创建转储时停止所有应用程序活动.
这是“短暂”暂停还是“长时间”暂停取决于倾倒量.如果使用“-dump”,则将转储整个堆,包括无法访问的对象.如果使用“-dump:live”,则只会转储可到达的对象……但这也需要(至少)标记堆以确定哪些对象可以访问.
但是如果要转储一个千兆字节大小的堆,则期望以分钟而不是秒来测量暂停时间.
建议您可以通过使用fork来避免停止JVM,但事实证明,分叉多线程进程可能会出现问题:
> fork in multi-threaded program
> Multithreaded fork
> http://www.linuxprogrammingblog.com/threads-and-fork-think-twice-before-using-them
然后是资源使用问题.