Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用toString()时内存泄漏_Java - Fatal编程技术网

Java 使用toString()时内存泄漏

Java 使用toString()时内存泄漏,java,Java,转换为字符串(即toString())会消耗大量内存,甚至导致内存泄漏吗?如果是,那么有什么方法来处理这个问题吗?我想当我将pdf文本解析为简单文本时,我的程序消耗了大量内存,不知道这是否是原因 PS:我正在使用itext解析pdf如果您有一个大的pdf,那么它确实会消耗大量内存。我能看到的唯一解决方案是将pdf文件分成几个较小的文件,然后在每个文件上运行操作。最后,重新组合结果 更新: 在谷歌搜索时,我发现可以使用itext库拆分pdf,请查看以下链接: 将somethinfn转换为字符串通

转换为字符串(即toString())会消耗大量内存,甚至导致内存泄漏吗?如果是,那么有什么方法来处理这个问题吗?我想当我将pdf文本解析为简单文本时,我的程序消耗了大量内存,不知道这是否是原因


PS:我正在使用itext解析pdf

如果您有一个大的pdf,那么它确实会消耗大量内存。我能看到的唯一解决方案是将pdf文件分成几个较小的文件,然后在每个文件上运行操作。最后,重新组合结果

更新:

在谷歌搜索时,我发现可以使用itext库拆分pdf,请查看以下链接:


将somethinfn转换为字符串通常需要分配新的字符串对象(这会消耗内存)。这是否构成内存泄漏取决于toString()方法的实现。但通常不会有内存泄漏

不要使用itext将pdf转换为字符串。如果要从pdf中提取文本,请使用ApachePDFBox库。Itext并不是为了这个目的,尽管它确实做到了

这里有一些代码可以帮助您开始

public static String pdftoText(File file) {
    PDFParser parser=null;
    String parsedText = null;
    PDFTextStripper pdfStripper = null;
    PDDocument pdDoc = null;
    COSDocument cosDoc = null;
    try {
        parser = new PDFParser(new FileInputStream(file));
        parser.parse();
        cosDoc = parser.getDocument();
        pdfStripper = new PDFTextStripper();
        pdDoc = new PDDocument(cosDoc);
        parsedText = pdfStripper.getText(pdDoc);
    } catch (Exception e) {
        // handle exception
    } finally {
        try {
            if (cosDoc != null)
                cosDoc.close();
            if (pdDoc != null)
                pdDoc.close();
        } catch (Exception e) {
            // handle excpetion
        }
    }
    return parsedText;
}  
我不知道这会对你的记忆造成什么影响。。试试这个,看看是否有帮助。网址如下:


定义“大量内存”。大量内存作为内存泄漏可能是调用System.gc()时发生的情况?它会释放内存吗?如果再次调用方法,然后调用System.gc()会怎么样再说一遍?@raghav这一点用都没有。不,它不会释放内存,当pdf很大时会发生内存泄漏。我认为itext库不允许这样做procedure@raghav我从未尝试过使用itext,但您当然可以使用普通java操作拆分pdf。@raghav检查我的更新版本answer@raghav如果这个答案对你有帮助,请检查一下