always try to guess the size of a StringBuilder to prevent too many memory re-allocations

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@7572 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
orbiter 14 years ago
parent bea8137997
commit e1b6916423

@ -85,10 +85,11 @@ public class getpageinfo_p {
prop.putXML("lang", (languages == null) ? "unknown" : languages.iterator().next());
// get links and put them into a semicolon-separated list
StringBuilder links = new StringBuilder();
StringBuilder filter = new StringBuilder();
Set<MultiProtocolURI> uris = scraper.getAnchors().keySet();
StringBuilder links = new StringBuilder(uris.size() * 80);
StringBuilder filter = new StringBuilder(uris.size() * 40);
count = 0;
for (MultiProtocolURI uri: scraper.getAnchors().keySet()) {
for (MultiProtocolURI uri: uris) {
links.append(';').append(uri.toNormalform(true, false));
filter.append('|').append(uri.getProtocol()).append("://").append(uri.getHost()).append(".*");
prop.putXML("links_" + count + "_link", uri.toNormalform(true, false));

@ -160,9 +160,9 @@ public class yacysearchitem {
prop.putHTML("content_creator", result.creator());// author
prop.putHTML("content_subject", result.subject());
final Set<String>[] query = theQuery.queryWords();
final StringBuilder s = new StringBuilder();
final StringBuilder s = new StringBuilder(query[0].size() * 20);
for (final String t: query[0]) {
s.append("+").append(t);
s.append('+').append(t);
}
final String words = (s.length() > 0) ? s.substring(1) : "";
prop.putHTML("content_words", words);

@ -123,13 +123,13 @@ public class ListManager {
* @return String with elements from set separated by comma.
*/
public static String collection2string(final Collection<String> col){
final StringBuilder str = new StringBuilder();
final StringBuilder str = new StringBuilder(col.size() * 40);
if (col != null && !col.isEmpty()) {
final Iterator<String> it = col.iterator();
str.append(it.next());
while(it.hasNext()) {
str.append(",").append(it.next());
str.append(',').append(it.next());
}
}

@ -56,7 +56,7 @@ public class URLLicense {
public String aquireLicense(final DigestURI url) {
// generate license key
StringBuilder stringBuilder = new StringBuilder();
StringBuilder stringBuilder = new StringBuilder(keylen * 2);
if (url == null) return stringBuilder.toString();
while (stringBuilder.length() < keylen) stringBuilder.append(Integer.toHexString(random.nextInt()));
String license = stringBuilder.substring(0, keylen);

@ -472,7 +472,7 @@ public final class QueryParams {
final String ext, final int page, final QueryParams theQuery,
String newQueryString, final String originalUrlMask, final String nav) {
final StringBuilder sb = new StringBuilder();
final StringBuilder sb = new StringBuilder(120);
sb.append("/yacysearch.");
sb.append(ext);
sb.append("?query=");

@ -27,7 +27,6 @@
package de.anomic.search;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import net.yacy.kelondro.logging.Log;
@ -241,15 +240,13 @@ public class RankingProfile {
}
public String toExternalURLGet(final String prefix) {
final Iterator<Map.Entry<String, String>> i = toExternalMap("").entrySet().iterator();
Map.Entry<String, String> entry;
final StringBuilder ext = new StringBuilder();
while (i.hasNext()) {
entry = i.next();
ext.append("&");
final Map<String, String> emap = toExternalMap("");
final StringBuilder ext = new StringBuilder(emap.size() * 40);
for (Map.Entry<String, String> entry: emap.entrySet()) {
ext.append('&');
ext.append(prefix);
ext.append(entry.getKey());
ext.append("=");
ext.append('=');
ext.append(entry.getValue());
}
return ext.toString();

@ -350,8 +350,8 @@ public class TextSnippet implements Comparable<TextSnippet>, Comparator<TextSnip
//especially p. 123 and p. 390/391 (in the German version of the 2nd edition)
StringBuilder theWord = new StringBuilder(word);
StringBuilder prefix = new StringBuilder();
StringBuilder postfix = new StringBuilder();
StringBuilder prefix = new StringBuilder(40);
StringBuilder postfix = new StringBuilder(40);
int len = 0;
// cut off prefix if it contains of non-characters or non-numbers
@ -372,7 +372,7 @@ public class TextSnippet implements Comparable<TextSnippet>, Comparator<TextSnip
StringBuilder out = null;
String temp = "";
for(int k=0; k < theWord.length(); k++) {
out = new StringBuilder();
out = new StringBuilder(80);
//is character a special character?
if(p4.matcher(theWord.substring(k,k+1)).find()) {
if (UTF8.String(Word.word2hash(temp)).equals(UTF8.String(h))) temp = "<b>" + CharacterCoding.unicode2html(temp, false) + "</b>";

@ -373,7 +373,7 @@ public class serverObjects extends HashMap<String, String> implements Cloneable
*/
public String toString() {
if (this.size() == 0) return "";
StringBuilder param = new StringBuilder();
StringBuilder param = new StringBuilder(this.size() * 40);
for (Map.Entry<String, String> entry: this.entrySet()) {
param.append(MultiProtocolURI.escape(entry.getKey()));
param.append('=');

@ -261,7 +261,7 @@ public class yacyPeerActions {
try {
final long mins = millis / 60000;
final StringBuilder uptime = new StringBuilder();
final StringBuilder uptime = new StringBuilder(40);
final int uptimeDays = (int) (Math.floor(mins/1440.0));
final int uptimeHours = (int) (Math.floor(mins/60.0)%24);
@ -271,7 +271,7 @@ public class yacyPeerActions {
.append(((uptimeDays == 1)?" day ":" days "))
.append((uptimeHours < 10)?"0":"")
.append(uptimeHours)
.append(":")
.append(':')
.append((uptimeMins < 10)?"0":"")
.append(uptimeMins);

@ -131,7 +131,7 @@ public class yacySearch extends Thread {
}
public static String set2string(final HandleSet hashes) {
StringBuilder wh = new StringBuilder();
StringBuilder wh = new StringBuilder(hashes.size() * 12);
final Iterator<byte[]> iter = hashes.iterator();
while (iter.hasNext()) { wh.append(UTF8.String(iter.next())); }
return wh.toString();

@ -70,7 +70,7 @@ public class YaCySearchClient {
public SearchResult() throws IOException {
URL url;
Document doc;
String u = new StringBuilder().append("http://")
String u = new StringBuilder(120).append("http://")
.append(host)
.append(":")
.append(port)
@ -89,7 +89,7 @@ public class YaCySearchClient {
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
StringBuilder sb = new StringBuilder(this.size() * 80 + 1);
for (RSSEntry entry: this) sb.append(entry.toString());
return sb.toString();
}
@ -111,7 +111,7 @@ public class YaCySearchClient {
@Override
public String toString() {
return new StringBuilder().append("Title : ")
return new StringBuilder(80).append("Title : ")
.append(title)
.append("\nLink : ")
.append(link)

@ -284,7 +284,7 @@ public class JSONArray {
*/
private String join(String separator) throws JSONException {
int len = length();
StringBuilder sb = new StringBuilder();
StringBuilder sb = new StringBuilder(len * 20);
for (int i = 0; i < len; i += 1) {
if (i > 0) {

@ -298,18 +298,18 @@ public class MultiProtocolURI implements Serializable, Comparable<MultiProtocolU
// handle international domains
if (!Punycode.isBasic(host)) try {
final String[] domainParts = patternDot.split(host, 0);
StringBuilder buffer = new StringBuilder();
StringBuilder buffer = new StringBuilder(80);
// encode each domain-part separately
for(int i=0; i<domainParts.length; i++) {
final String part = domainParts[i];
if(!Punycode.isBasic(part)) {
buffer.append("xn--").append(Punycode.encode(part));
} else {
buffer.append(part);
}
if(i != domainParts.length-1) {
buffer.append('.');
}
for(int i = 0; i < domainParts.length; i++) {
final String part = domainParts[i];
if (!Punycode.isBasic(part)) {
buffer.append("xn--").append(Punycode.encode(part));
} else {
buffer.append(part);
}
if (i != domainParts.length-1) {
buffer.append('.');
}
}
host = buffer.toString();
} catch (final PunycodeException e) {}

@ -45,16 +45,16 @@ public class Punycode {
int n = INITIAL_N;
int delta = 0;
int bias = INITIAL_BIAS;
final StringBuilder output = new StringBuilder();
final StringBuilder output = new StringBuilder(input.length() + 1);
// Copy all basic code points to the output
int b = 0;
for (int i = 0; i < input.length(); i++) {
final char c = input.charAt(i);
if (isBasic(c)) {
output.append(c);
b++;
}
final char c = input.charAt(i);
if (isBasic(c)) {
output.append(c);
b++;
}
}
// Append delimiter
@ -133,20 +133,20 @@ public class Punycode {
int n = INITIAL_N;
int i = 0;
int bias = INITIAL_BIAS;
final StringBuilder output = new StringBuilder();
int d = input.lastIndexOf(DELIMITER);
final StringBuilder output = new StringBuilder(d + 1);
if (d > 0) {
for (int j = 0; j < d; j++) {
final char c = input.charAt(j);
if (!isBasic(c)) {
throw new PunycodeException(PunycodeException.BAD_INPUT);
}
output.append(c);
}
d++;
for (int j = 0; j < d; j++) {
final char c = input.charAt(j);
if (!isBasic(c)) {
throw new PunycodeException(PunycodeException.BAD_INPUT);
}
output.append(c);
}
d++;
} else {
d = 0;
d = 0;
}
while (d < input.length()) {

@ -46,7 +46,7 @@ public class RSSReader extends DefaultHandler {
private RSSReader(int maxsize) {
theChannel = new RSSFeed(maxsize);
buffer = new StringBuilder();
buffer = new StringBuilder(300);
item = null;
parsingChannel = false;
parsingImage = false;

@ -644,11 +644,11 @@ dc_rights
long docTextLength = 0;
final ByteBuffer content = new ByteBuffer();
final StringBuilder authors = new StringBuilder();
final StringBuilder publishers = new StringBuilder();
final StringBuilder subjects = new StringBuilder();
final StringBuilder title = new StringBuilder();
final StringBuilder description = new StringBuilder();
final StringBuilder authors = new StringBuilder(80);
final StringBuilder publishers = new StringBuilder(80);
final StringBuilder subjects = new StringBuilder(80);
final StringBuilder title = new StringBuilder(80);
final StringBuilder description = new StringBuilder(80);
final LinkedList<String> sectionTitles = new LinkedList<String>();
final Map<MultiProtocolURI, String> anchors = new HashMap<MultiProtocolURI, String>();

@ -165,6 +165,7 @@ public class SnippetExtractor {
// so cut it here at both ends at once
assert maxpos >= minpos;
final int newlen = Math.max(10, maxpos - minpos + 10);
assert maxLength >= newlen: "maxLength = " + maxLength + ", newlen = " + newlen;
final int around = (maxLength - newlen) / 2;
assert minpos - around < sentence.length() : "maxpos = " + maxpos + ", minpos = " + minpos + ", around = " + around + ", sentence.length() = " + sentence.length() + ", maxLength = " + maxLength + ", newlen = " + newlen; //maxpos = 435, minpos = 17, around = -124, sentence.length() = 44
sentence = "[..] " + sentence.substring(minpos - around, ((maxpos + around) > sentence.length()) ? sentence.length() : (maxpos + around)).trim() + " [..]";

@ -58,7 +58,7 @@ public class SurrogateReader extends DefaultHandler implements Runnable {
private final InputStream stream;
public SurrogateReader(final InputStream stream, int queueSize) throws IOException {
this.buffer = new StringBuilder();
this.buffer = new StringBuilder(300);
this.parsingValue = false;
this.surrogate = null;
this.elementName = null;

@ -64,12 +64,12 @@ public class docParser extends AbstractParser implements Parser {
throw new Parser.Failure("error in docParser, WordTextExtractorFactory: " + e.getMessage(), location);
}
final StringBuilder contents = new StringBuilder();
final StringBuilder contents = new StringBuilder(80);
try {
contents.append(extractor.getText().trim());
contents.append(" ");
contents.append(' ');
contents.append(extractor.getHeaderText());
contents.append(" ");
contents.append(' ');
contents.append(extractor.getFooterText());
} catch (Exception e) {
throw new Parser.Failure("error in docParser, getText: " + e.getMessage(), location);

@ -66,7 +66,7 @@ public class psParser extends AbstractParser implements Parser {
private boolean testForPs2Ascii() {
try {
String procOutputLine = null;
final StringBuilder procOutput = new StringBuilder();
final StringBuilder procOutput = new StringBuilder(80);
final Process ps2asciiProc = Runtime.getRuntime().exec(new String[]{"ps2ascii", "--version"});
final BufferedReader stdOut = new BufferedReader(new InputStreamReader(ps2asciiProc.getInputStream()));

@ -175,7 +175,7 @@ public class sitemapParser extends AbstractParser implements Parser {
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
final StringBuilder sb = new StringBuilder(300);
for (final URLEntry entry: this) {
sb.append(entry.toString());
}

@ -72,7 +72,7 @@ public class torrentParser extends AbstractParser implements Parser {
final String comment = (commento == null) ? "" : UTF8.String(commento.getString());
//Date creation = new Date(map.get("creation date").getInteger());
final BObject infoo = map.get("info");
final StringBuilder filenames = new StringBuilder();
final StringBuilder filenames = new StringBuilder(80);
String title = "";
if (infoo != null) {
final Map<String, BObject> info = infoo.getMap();

@ -459,7 +459,7 @@ public class Tables {
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
StringBuilder sb = new StringBuilder(this.size() * 40);
sb.append('{');
for (Map.Entry<String, byte[]> entry: this.entrySet()) {
sb.append(entry.getKey()).append('=').append(UTF8.String(entry.getValue())).append(", ");

@ -194,7 +194,7 @@ public final class Column {
@Override
public final String toString() {
final StringBuilder s = new StringBuilder();
final StringBuilder s = new StringBuilder(20);
switch (celltype) {
case celltype_undefined:
s.append(nickname);

@ -136,7 +136,7 @@ public final class Row {
@Override
public final String toString() {
final StringBuilder s = new StringBuilder();
final StringBuilder s = new StringBuilder(80);
s.append(row[0].toString());
for (int i = 1; i < row.length; i++) {
s.append(", ");

@ -1018,7 +1018,7 @@ public class RowCollection implements Iterable<Row.Entry>, Cloneable {
}
public synchronized String toString() {
final StringBuilder s = new StringBuilder();
final StringBuilder s = new StringBuilder(80);
final Iterator<Row.Entry> i = iterator();
if (i.hasNext()) s.append(i.next().toString());
while (i.hasNext()) s.append(", " + (i.next()).toString());

@ -32,7 +32,7 @@ import java.util.logging.SimpleFormatter;
public final class MiniLogFormatter extends SimpleFormatter {
private final StringBuilder buffer = new StringBuilder();
private final StringBuilder buffer = new StringBuilder(80);
public MiniLogFormatter() {
super();

@ -147,7 +147,7 @@ public class BDecoder {
}
@Override
public String toString() {
StringBuilder s = new StringBuilder();
StringBuilder s = new StringBuilder(l.size() * 40 + 1);
s.append("[");
for (BObject o: l) s.append(o.toString()).append(",");
s.setLength(s.length() - 1);
@ -176,11 +176,11 @@ public class BDecoder {
}
@Override
public String toString() {
StringBuilder s = new StringBuilder();
s.append("{");
for (Map.Entry<String, BObject> e: m.entrySet()) s.append(e.getKey()).append(":").append(e.getValue().toString()).append(",");
StringBuilder s = new StringBuilder(m.size() * 40 + 1);
s.append('{');
for (Map.Entry<String, BObject> e: m.entrySet()) s.append(e.getKey()).append(':').append(e.getValue().toString()).append(',');
s.setLength(s.length() - 1);
s.append("}");
s.append('}');
return s.toString();
}
public void toStream(OutputStream os) throws IOException {

@ -602,7 +602,7 @@ public final class FileUtils {
* @return String representation of the file content.
*/
public static String getListString(final File listFile, final boolean withcomments){
final StringBuilder temp = new StringBuilder();
final StringBuilder temp = new StringBuilder(300);
BufferedReader br = null;
try{
@ -726,7 +726,7 @@ public final class FileUtils {
* @return returns <code>true</code> if successful, <code>false</code> otherwise
*/
public static boolean writeList(final File listFile, final String[] list){
final StringBuilder out = new StringBuilder();
final StringBuilder out = new StringBuilder(list.length * 40 + 1);
for(int i=0;i < list.length; i++){
out.append(list[i]).append(CR).append(LF);
}

@ -109,8 +109,8 @@ public final class MapTools {
}
public static String set2string(final Set<String> s, final String separator, final boolean braces) {
final StringBuilder buf = new StringBuilder();
if (braces) buf.append("{");
final StringBuilder buf = new StringBuilder(s.size() * 40 + 1);
if (braces) buf.append('{');
final Iterator<String> i = s.iterator();
boolean hasNext = i.hasNext();
while (hasNext) {
@ -118,7 +118,7 @@ public final class MapTools {
hasNext = i.hasNext();
if (hasNext) buf.append(separator);
}
if (braces) buf.append("}");
if (braces) buf.append('}');
return new String(buf);
}

@ -218,7 +218,7 @@ public class WorkflowProcessor<J extends WorkflowJob> {
}
public String getChilds() {
StringBuilder s = new StringBuilder();
StringBuilder s = new StringBuilder(this.childs.length * 40 + 1);
for (int i = 0; i < this.childs.length; i++) {
s.append(this.childs[i]);
s.append(' ');

Loading…
Cancel
Save