好的,我在网上读过很多关于finalize()方法的文章,以及我们不能真正依赖它的事实.
是的,很清楚(我想)
但是,当内存泄漏发生时,在深入VisualVM内部之前,我是否可以使用finalize方法作为主要的调试工具?
(一个微小的日志消息,比如finalize中释放的对象和构造函数中的“创建对象”)
发布于 2013-09-28 13:54:54
您希望跟踪被保留的对象,而不是那些正在释放的对象( finalize显示的就是这样)。更重要的是,您想知道为什么要保留对象,即保存对象的引用路径。我建议使用VisualVM作为起点,如果堆很大或者问题很难解决,就可能使用商业分析器。
当资源未被明确清除时,我使用了finalize()进行日志记录。也就是说,它应该近在咫尺。
发布于 2015-04-25 06:34:05
通过添加jvm参数生成堆转储/系统核心。然后http://www.oracle.com/technetwork/java/javase/memleaks-137499.html下载http://eclipse.org/mat/工具。在上面的工具中加载生成的转储,然后如下所示

通过选择终结器概述,它将提供可由终结器线程清除的对象数量以及终结器线程的相关信息。
https://stackoverflow.com/questions/19067688
复制相似问题