我正在尝试编写一个网络抓取工具。当我浏览大页面时,我的arraylist变量无法保存所有数据。它抛出异常。 线程“Thread-0”中的异常java.lang.StackOverflowError“。
持有这些网址的最佳方式是什么,因为我需要访问这些网址和儿童网址等等。
我想过保存到数据库或写入文件,但这些机制可能会降低爬虫的性能。
答案 0 :(得分:3)
当我浏览大页面时,我的arraylist变量无法保存所有数据
这不正确。
Exception in thread "Thread-0" java.lang.StackOverflowError
StackOverflowException
不是由于ArrayList
容量耗尽造成的,这是2 ^ 31-1个条目。它是由过度递归引起的。
可能您没有跟踪您已访问过的网址,也没有遇到链接周期。
答案 1 :(得分:0)
理论上,ArrayList容量的限制为Integer.MAX_VALUE
。但是,它取决于可用于JVM的内存量。如果有足够的堆空间来存储字符串,那么它将存储大量的字符串。