2

我正在尝试浏览网址列表并分析其主页的内容。为此,我有一个没有 reducer 的 Hadoop 映射器,它获取 url 并将它们发送到解析器类进行解析。

解析器使用Jericho 的 html 解析器的流式源代码类来读取页面的内容。它实际上使用缓冲阅读器接收所述页面的内容。我让它调用流式源和缓冲读取器类的 close 方法,之后我的映射器调用解析器的 toString 方法并继续到下一个 url。

快速的内存分析表明有一堆 finalize 对象,垃圾收集器似乎无法跟上。我听说过关于可靠性的坏消息,System.gc()所以我想知道是否有另一种更清洁的方法来摆脱这个巨大的 finalize 对象堆。

4

1 回答 1

1

最好的解决方案是从代码中删除终结器。JVM 不保证何时调用终结代码。您遇到的另一个问题是终结器线程可能无法跟上您的应用程序的分配率。

分析使用终结器的对象的生命周期并确定可以调用终结代码的时间点,更改代码以便不定义终结器并手动调用所有关闭/终结序列。

于 2013-07-01T22:16:13.807 回答