我正在做一个自动运行的webcrawler。在某些时候,我想停止它,更改一些设置并重新开始爬行。
我担心资源问题。我可以释放我创建的对象,但我不知道Java使用的对象。做一些调试,我发现它比应用程序启动时有更多的类。
有一些技术/方法/方法来解放这些吗?我需要担心这个吗?
答案 0 :(得分:0)
有一些技术/方法/方法来解放这些吗?
理论上,您可以序列化应用程序的关键数据结构,重新启动并重新加载序列化数据结构。
在实践中,必须编写应用程序才能执行此操作。您可能必须重新构建现有(不可重新启动)的应用程序才能实现此目的。因此,更好的想法是将重要的应用程序状态存储在数据库表中,以便您可以随意停止和重新启动...并在应用程序崩溃或电源故障后继续存在。
我需要担心这个吗?
这取决于您/取决于您的要求。但是我会避免以这种方式实现应用程序。
答案 1 :(得分:0)
我认为您需要更好地了解创建哪些对象以及哪些对象保留在内存中。分析器工具可以帮助您 - 其中许多工具可以让您拍摄内存快照,执行某些操作,然后将当前状态与快照进行比较。这突出了可能的内存泄漏。
此外,请确保在查看内存状态之前显式运行垃圾收集器 - 否则您可能会看到许多实际未引用的对象,并将被下一个GC收集。
我不担心JVM分配的资源。只要你释放你分配的所有资源,你应该没问题 - 而且一个分析器会帮助你确保你确实释放它们。