我正在处理一个时间敏感的应用程序,每次迭代的时间限制为40毫秒。如果超过了这个时间限制,应用程序将被终止并游戏结束。应用程序本身没有问题,可以保持在40毫秒以下,但有时垃圾收集器会超过限制。
通过使用对象池和工厂模式相结合,我成功地减少了对垃圾收集的需求,并使应用程序在包括小型GC运行在内的稳定17毫秒迭代时间,除了在应用程序启动后的10到20次迭代之间,只发生一次单个完整的GC,这超过了40毫秒并导致我的应用程序崩溃。
我的问题是,如何分析是什么导致了这一次完整的GC?我已经积极使用jvisualvm来分析我的运行时和内存占用情况,并且它对识别需要缓存的对象非常有帮助。但在这种特殊情况下,我无法使用它,因为完整的GC发生在我按下jvisualvm中正确按钮之前很久。是否有一种方法可以以编程方式生成堆转储文件?
通过使用对象池和工厂模式相结合,我成功地减少了对垃圾收集的需求,并使应用程序在包括小型GC运行在内的稳定17毫秒迭代时间,除了在应用程序启动后的10到20次迭代之间,只发生一次单个完整的GC,这超过了40毫秒并导致我的应用程序崩溃。
我的问题是,如何分析是什么导致了这一次完整的GC?我已经积极使用jvisualvm来分析我的运行时和内存占用情况,并且它对识别需要缓存的对象非常有帮助。但在这种特殊情况下,我无法使用它,因为完整的GC发生在我按下jvisualvm中正确按钮之前很久。是否有一种方法可以以编程方式生成堆转储文件?