0

我正在尝试优化一个方法 writeZipResults,它采用 ByteOutputStream 列表并将其转换为单个 zip 文件作为 ZipOutputStream。

方法定义:

public void writeZipResults(Map<String, ByteArrayOutputStream> files, OutputStream outputStream) throws IOException {
    Stopwatch writeZipResultsTimer = Stopwatch.createStarted();
    if(files != null) {
    ZipOutputStream zip = new ZipOutputStream(outputStream);
    for(String filename : files.keySet()) {
        ByteArrayOutputStream pdfInMemory = files.get(filename);
        if(pdfInMemory != null) {
            ZipEntry entry = new ZipEntry(filename + fileTypes.getExtension());
            zip.putNextEntry(entry);
            pdfInMemory.writeTo(zip);
            zip.closeEntry();
            pdfInMemory.close();
        }
    }
    zip.close();
    logger.info("Took {} ms to complete writeZipResults method, writeZipResultsTimer.elapsed(TimeUnit.MILISECONDS));
}

}

为了优化上述方法,我添加了 zip.setLevel(0) 即无压缩,这最大限度地减少了方法执行时间,从而在我的本地窗口系统中大大扩展。

但是当我在 linux 环境中使用 zip.setLevel(0) 运行相同的代码时,我没有获得与 Windows 系统下相同的性能。

我的观点是来自 Linux 的应用程序日志(以黄色突出显示)和我的本地 Windows 系统为具有完全相同数据集的相同场景捕获的:

在此处输入图像描述

要添加更多信息:
Java 版本:7
用例:对于一组属性,为每个属性创建 pdf 文件,并将所有 pdf 文件组合成 zip 文件并在 http 响应中返回。所有文件创建过程都在内存中。

请建议如何在linux环境下优化方法?

4

0 回答 0