我正在使用 Java 读取大约 6 GB 的 JSON 文件。目标是将所有 JSON 数据导入 MySQL 数据库。对于一些初始记录,程序运行良好,但随后抛出 java.lang.OutOfMemoryError
和消息 Java 堆空间错误。我使用 JsonParser
类读取文件,并使用 nextToken()
读取下一个 JSON token 。运行该程序的系统有 8 GB RAM。
如何将 JSON 数据集中的所有数据插入 MySQL 数据库?
最佳答案
系统具有 8 GB RAM 的事实并不一定意味着 JVM 可以分配该内存量。 JVM 的总空间取决于多种因素,包括操作系统、Java 配置和 JVM 开销。
我猜测您正在立即读取该文件,这需要 JVM 分配大约 6 GB 的内存才能将所有字节存储到内存中。 JVM 无法分配该内存量并抛出 OutOfMemoryError
。
如果上述假设是正确的,那么您可能希望在读取输入流时立即对其进行处理。 Jackson和 Gson可能会为您完成这项工作。
- This question有几个可能对阅读有用的答案。
- Javarevisited.blogspot.nl提供了使用 Jackson Streaming API 在读取 JSON 文件时对其进行处理的教程。
有关 Java 堆大小的更多信息:http://javarevisited.blogspot.nl/2011/05/java-heap-space-memory-size-jvm.html .
关于java - 将大型 JSON 文件中的数据插入 MySQL 数据库时出现 OutOfMemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32703909/