我正在尝试优化一个方法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系统捕获的具有完全相同数据集的相同场景:
To add more information: Java Version: 7 Use case: for set of attributes create pdf file for each attribute and combine all pdf files into zip file and return in http response. All file creation process is in memory.
请建议如何在linux环境下优化方法?