java - 在java中读取2GB xml文件时出现OOM错误

标签 java xml java-8 xml-parsing

我一直在尝试读取一个 2GB 的 XML 文件。我遵循不同的方法来读取它,但每种方法都会给出 OutOfMemoryError 我什至尝试将 eclispe 中的堆大小最大值增加到 4GB,最小堆大小增加到 2GB,但问题仍然存在。我该如何解决这个问题?我不想使用任何第三方 libaray。

以下是我迄今为止尝试过的代码

String str = new String(Files.readAllBytes(Paths.get(pathname)),
                    StandardCharsets.UTF_8);

try(Scanner scanner = new Scanner(new File(pathname))) {

while ( scanner.hasNextLine() ) {

    String line = scanner.nextLine();

   }

}

最佳答案

每个字符至少使用 2 个字节,并且还需要内存进行处理。我会给它更多的内存,比如 24 GB,看看它真正需要多少。

注意Java 9+具有压缩字符串,可以减少消耗。

更好的方法是在读取文件时使用 SAX 解析器来处理文件,这将占用一小部分内存。

关于java - 在java中读取2GB xml文件时出现OOM错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52465342/

相关文章:

java - 不能在一个流中制作 filter->forEach->collect 吗?

java - List<Dog> 是 List<Animal> 的子类吗?为什么 Java 泛型不是隐式多态的?

java - 如何从命令行将 Groovy 脚本作为 Java 运行?

java - Spring 3 : Inject Default Bean Unless Another Bean Present

xml - SOAP::Lite Perl 模块发送错误的 SOAP 信封命名空间

c# - XML 序列化使用空数组而不是 NULL

Java - 寻找比 PriorityQueue 更快的东西

java - 如何配置简单的 Java fontconfig.properties 文件以在 Linux 上使用

java - Linux 上 Android Studio 的 JDK 路径

java - 查找流中的哪个元素与 allmatch 中的给定谓词不匹配