From fe0aabcd8d03d5e61e182494d222ccb47bf30bb7 Mon Sep 17 00:00:00 2001 From: sebastien-doyon Date: Tue, 26 Sep 2023 15:36:00 +0200 Subject: [PATCH] [MNG-7899] Various memory usage improvements Merging the getStatus() method to optimize : - Use the main StringBuilder to append string instead of using a separate one - Use the StringBuilder.append() with index to avoid String.substring(), less temporary strings - Reuse the FileSizeFormat object in the while loop avoiding multiple temporary instances creation --- .../ConsoleMavenTransferListener.java | 44 ++++++++++--------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/transfer/ConsoleMavenTransferListener.java b/maven-embedder/src/main/java/org/apache/maven/cli/transfer/ConsoleMavenTransferListener.java index a0045f712a7c..c7b132adc5b6 100644 --- a/maven-embedder/src/main/java/org/apache/maven/cli/transfer/ConsoleMavenTransferListener.java +++ b/maven-embedder/src/main/java/org/apache/maven/cli/transfer/ConsoleMavenTransferListener.java @@ -68,13 +68,34 @@ public synchronized void transferProgressed(TransferEvent event) throws Transfer buffer.append("Progress (").append(transfers.size()).append("): "); synchronized (transfers) { + FileSizeFormat format = new FileSizeFormat(Locale.ENGLISH); + Iterator> entries = transfers.entrySet().iterator(); while (entries.hasNext()) { Map.Entry entry = entries.next(); long total = entry.getKey().getContentLength(); Long complete = entry.getValue(); - buffer.append(getStatus(entry.getKey().getResourceName(), complete, total)); + + String resourceName = entry.getKey().getResourceName(); + + if (printResourceNames) { + int idx = resourceName.lastIndexOf('/'); + + if (idx < 0) { + buffer.append(resourceName); + } else { + buffer.append(resourceName, idx + 1, resourceName.length()); + } + buffer.append(" ("); + } + + buffer.append(format.formatProgress(complete, total)); + + if (printResourceNames) { + buffer.append(")"); + } + if (entries.hasNext()) { buffer.append(" | "); } @@ -89,25 +110,6 @@ public synchronized void transferProgressed(TransferEvent event) throws Transfer out.flush(); } - private String getStatus(String resourceName, long complete, long total) { - FileSizeFormat format = new FileSizeFormat(Locale.ENGLISH); - StringBuilder status = new StringBuilder(); - - if (printResourceNames) { - int idx = resourceName.lastIndexOf('/'); - status.append(idx < 0 ? resourceName : resourceName.substring(idx + 1)); - status.append(" ("); - } - - status.append(format.formatProgress(complete, total)); - - if (printResourceNames) { - status.append(")"); - } - - return status.toString(); - } - private void pad(StringBuilder buffer, int spaces) { String block = " "; while (spaces > 0) { @@ -135,7 +137,7 @@ public synchronized void transferFailed(TransferEvent event) { private void overridePreviousTransfer(TransferEvent event) { if (lastLength > 0) { - StringBuilder buffer = new StringBuilder(128); + StringBuilder buffer = new StringBuilder(lastLength + 1); pad(buffer, lastLength); buffer.append('\r'); out.print(buffer);