我正在尝试优化一个方法 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环境下优化方法?