我运行了一个 jvm 进程,有一天它遇到了内存不足的异常。在日志中我发现了许多内存不足的错误::
-bash-3.00# grep OutOfMemoryError AdminServer.log00399 java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError: Java heap space ####<2013-6-28 05:09:27 pm CST> <Error> <Server> <kfmsapp2> <AdminServer> <DynamicListenThread[Default[3]]> <<WLS Kernel>> <> <>
<1372410567863>
它还生成了一个heapdump文件,我用mat分析后发现它是一个线程中的一个大对象,我只知道它是一个hibernate common object org.hibernate.engine.PersistenceContext
,但我不知道它来自哪里。
我想写一个小程序,当出现内存不足错误时,它会自动生成一个threaddump文件。
我的问题是:程序执行的最佳时间是准确地进行线程转储?是在日志文件中出现的第一个内存不足错误吗?