java消除垃圾生成

时间:2015-03-20 16:10:17

标签: java memory-management optimization garbage-collection garbage

假设我们有独立工作的java任务,我们可以使用visualvm监视它...我们注意到连续垃圾创建和周期性gc这样。

enter image description here

我们如何检测导致此问题的确切原因

有没有办法看到哪个方法执行生成垃圾?我们怎么看垃圾来自哪里?

是的,我们可以看到究竟是什么对象正在分配内存,但那没有用......我相信很多对象都是后来创建和使用的,但是我无法弄清楚发生了什么以及究竟是什么导致这个...

我们通常如何做到这一点?使用什么工具?欢迎任何有关此主题的链接

注意这里的问题不是GC参数优化,而是代码优化,我们想要消除不必要的对象创建,也许使用原语代替等等......

2 个答案:

答案 0 :(得分:2)

最简单的方法是使用JProfiler和记录分配等工具。 “Allocation HotSpot”视图将显示应用程序分配对象的方法。可以找到更多详细信息here

当您无法使用分析器时,另一种方法是使用heapdump并调查它包含的对象。然后根据这些信息假设它们被实例化的方法。

答案 1 :(得分:1)

我建议在jvisualvm中安装VisualGC插件。它会让你非常了解发生的小型和全部GC的数量。

enter image description here

如果您正在寻找垃圾收集对象以及可能发生内存泄漏的可能性,那么您应该在代码工作流的两个不同实例中检查堆转储。

相关问题