From 3bb2c149aba3553aa4d57f8047d41510d1c1b622 Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Fri, 4 Apr 2003 08:36:22 +0000 Subject: [PATCH] Speed up by buffering output. Vastly reduce memory requirements of DOMElementWriter on JDK 1.4.1 by using the workaround for JDK 1.4.1's StringBuffer#toString memory leak (JDC BugParade Bug 4724129). PR: 18504 Submitted by: Andrus Adamchik git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274393 13f79535-47bb-0310-9956-ffa450edef68 --- .../taskdefs/optional/junit/XMLJUnitResultFormatter.java | 3 ++- .../ant/taskdefs/optional/junit/XMLResultAggregator.java | 5 +++-- .../tools/ant/taskdefs/optional/junit/XalanExecutor.java | 5 +++-- src/main/org/apache/tools/ant/util/DOMElementWriter.java | 9 +++++---- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLJUnitResultFormatter.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLJUnitResultFormatter.java index 23e14af08..f79e714a6 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLJUnitResultFormatter.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLJUnitResultFormatter.java @@ -54,6 +54,7 @@ package org.apache.tools.ant.taskdefs.optional.junit; +import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; @@ -165,7 +166,7 @@ public class XMLJUnitResultFormatter implements JUnitResultFormatter, XMLConstan if (out != null) { Writer wri = null; try { - wri = new OutputStreamWriter(out, "UTF8"); + wri = new BufferedWriter(new OutputStreamWriter(out, "UTF8")); wri.write("\n"); (new DOMElementWriter()).write(rootElement, wri, 0, " "); wri.flush(); diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLResultAggregator.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLResultAggregator.java index 833b6966c..08c16028e 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLResultAggregator.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLResultAggregator.java @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001-2002 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -53,6 +53,7 @@ */ package org.apache.tools.ant.taskdefs.optional.junit; +import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -228,7 +229,7 @@ public class XMLResultAggregator extends Task implements XMLConstants { OutputStream out = null; PrintWriter wri = null; try { - out = new FileOutputStream(file); + out = new BufferedOutputStream(new FileOutputStream(file)); wri = new PrintWriter(new OutputStreamWriter(out, "UTF8")); wri.write("\n"); (new DOMElementWriter()).write(doc.getDocumentElement(), wri, 0, " "); diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/XalanExecutor.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/XalanExecutor.java index 6d350ec3f..c2a7d5d0f 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/XalanExecutor.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/XalanExecutor.java @@ -53,6 +53,7 @@ */ package org.apache.tools.ant.taskdefs.optional.junit; +import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; @@ -81,12 +82,12 @@ abstract class XalanExecutor { /** get the appropriate stream based on the format (frames/noframes) */ protected OutputStream getOutputStream() throws IOException { - if (caller.FRAMES.equals(caller.format)){ + if (AggregateTransformer.FRAMES.equals(caller.format)){ // dummy output for the framed report // it's all done by extension... return new ByteArrayOutputStream(); } else { - return new FileOutputStream(new File(caller.toDir, "junit-noframes.html")); + return new BufferedOutputStream(new FileOutputStream(new File(caller.toDir, "junit-noframes.html"))); } } diff --git a/src/main/org/apache/tools/ant/util/DOMElementWriter.java b/src/main/org/apache/tools/ant/util/DOMElementWriter.java index 0af04a27f..d0da06df7 100644 --- a/src/main/org/apache/tools/ant/util/DOMElementWriter.java +++ b/src/main/org/apache/tools/ant/util/DOMElementWriter.java @@ -205,7 +205,8 @@ public class DOMElementWriter { */ public String encode(String value) { sb.setLength(0); - for (int i = 0; i < value.length(); i++) { + int len = value.length(); + for (int i = 0; i < len; i++) { char c = value.charAt(i); switch (c) { case '<': @@ -236,7 +237,7 @@ public class DOMElementWriter { break; } } - return sb.toString(); + return sb.substring(0); } /** @@ -261,13 +262,13 @@ public class DOMElementWriter { } } - String result = sb.toString(); + String result = sb.substring(0); int cdEnd = result.indexOf("]]>"); while (cdEnd != -1) { sb.setLength(cdEnd); sb.append("]]>") .append(result.substring(cdEnd+3)); - result = sb.toString(); + result = sb.substring(0); cdEnd = result.indexOf("]]>"); }