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()); prop.putXML("lang", (languages == null) ? "unknown" : languages.iterator().next());
// get links and put them into a semicolon-separated list // get links and put them into a semicolon-separated list
StringBuilder links = new StringBuilder(); Set<MultiProtocolURI> uris = scraper.getAnchors().keySet();
StringBuilder filter = new StringBuilder(); StringBuilder links = new StringBuilder(uris.size() * 80);
StringBuilder filter = new StringBuilder(uris.size() * 40);
count = 0; count = 0;
for (MultiProtocolURI uri: scraper.getAnchors().keySet()) { for (MultiProtocolURI uri: uris) {
links.append(';').append(uri.toNormalform(true, false)); links.append(';').append(uri.toNormalform(true, false));
filter.append('|').append(uri.getProtocol()).append("://").append(uri.getHost()).append(".*"); filter.append('|').append(uri.getProtocol()).append("://").append(uri.getHost()).append(".*");
prop.putXML("links_" + count + "_link", uri.toNormalform(true, false)); 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_creator", result.creator());// author
prop.putHTML("content_subject", result.subject()); prop.putHTML("content_subject", result.subject());
final Set<String>[] query = theQuery.queryWords(); 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]) { for (final String t: query[0]) {
s.append("+").append(t); s.append('+').append(t);
} }
final String words = (s.length() > 0) ? s.substring(1) : ""; final String words = (s.length() > 0) ? s.substring(1) : "";
prop.putHTML("content_words", words); prop.putHTML("content_words", words);

@ -123,13 +123,13 @@ public class ListManager {
* @return String with elements from set separated by comma. * @return String with elements from set separated by comma.
*/ */
public static String collection2string(final Collection<String> col){ 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()) { if (col != null && !col.isEmpty()) {
final Iterator<String> it = col.iterator(); final Iterator<String> it = col.iterator();
str.append(it.next()); str.append(it.next());
while(it.hasNext()) { 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) { public String aquireLicense(final DigestURI url) {
// generate license key // generate license key
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder(keylen * 2);
if (url == null) return stringBuilder.toString(); if (url == null) return stringBuilder.toString();
while (stringBuilder.length() < keylen) stringBuilder.append(Integer.toHexString(random.nextInt())); while (stringBuilder.length() < keylen) stringBuilder.append(Integer.toHexString(random.nextInt()));
String license = stringBuilder.substring(0, keylen); String license = stringBuilder.substring(0, keylen);

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

@ -27,7 +27,6 @@
package de.anomic.search; package de.anomic.search;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator;
import java.util.Map; import java.util.Map;
import net.yacy.kelondro.logging.Log; import net.yacy.kelondro.logging.Log;
@ -241,15 +240,13 @@ public class RankingProfile {
} }
public String toExternalURLGet(final String prefix) { public String toExternalURLGet(final String prefix) {
final Iterator<Map.Entry<String, String>> i = toExternalMap("").entrySet().iterator(); final Map<String, String> emap = toExternalMap("");
Map.Entry<String, String> entry; final StringBuilder ext = new StringBuilder(emap.size() * 40);
final StringBuilder ext = new StringBuilder(); for (Map.Entry<String, String> entry: emap.entrySet()) {
while (i.hasNext()) { ext.append('&');
entry = i.next();
ext.append("&");
ext.append(prefix); ext.append(prefix);
ext.append(entry.getKey()); ext.append(entry.getKey());
ext.append("="); ext.append('=');
ext.append(entry.getValue()); ext.append(entry.getValue());
} }
return ext.toString(); 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) //especially p. 123 and p. 390/391 (in the German version of the 2nd edition)
StringBuilder theWord = new StringBuilder(word); StringBuilder theWord = new StringBuilder(word);
StringBuilder prefix = new StringBuilder(); StringBuilder prefix = new StringBuilder(40);
StringBuilder postfix = new StringBuilder(); StringBuilder postfix = new StringBuilder(40);
int len = 0; int len = 0;
// cut off prefix if it contains of non-characters or non-numbers // 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; StringBuilder out = null;
String temp = ""; String temp = "";
for(int k=0; k < theWord.length(); k++) { for(int k=0; k < theWord.length(); k++) {
out = new StringBuilder(); out = new StringBuilder(80);
//is character a special character? //is character a special character?
if(p4.matcher(theWord.substring(k,k+1)).find()) { 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>"; 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() { public String toString() {
if (this.size() == 0) return ""; if (this.size() == 0) return "";
StringBuilder param = new StringBuilder(); StringBuilder param = new StringBuilder(this.size() * 40);
for (Map.Entry<String, String> entry: this.entrySet()) { for (Map.Entry<String, String> entry: this.entrySet()) {
param.append(MultiProtocolURI.escape(entry.getKey())); param.append(MultiProtocolURI.escape(entry.getKey()));
param.append('='); param.append('=');

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

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

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

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

@ -298,7 +298,7 @@ public class MultiProtocolURI implements Serializable, Comparable<MultiProtocolU
// handle international domains // handle international domains
if (!Punycode.isBasic(host)) try { if (!Punycode.isBasic(host)) try {
final String[] domainParts = patternDot.split(host, 0); final String[] domainParts = patternDot.split(host, 0);
StringBuilder buffer = new StringBuilder(); StringBuilder buffer = new StringBuilder(80);
// encode each domain-part separately // encode each domain-part separately
for(int i = 0; i < domainParts.length; i++) { for(int i = 0; i < domainParts.length; i++) {
final String part = domainParts[i]; final String part = domainParts[i];

@ -45,7 +45,7 @@ public class Punycode {
int n = INITIAL_N; int n = INITIAL_N;
int delta = 0; int delta = 0;
int bias = INITIAL_BIAS; 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 // Copy all basic code points to the output
int b = 0; int b = 0;
@ -133,9 +133,9 @@ public class Punycode {
int n = INITIAL_N; int n = INITIAL_N;
int i = 0; int i = 0;
int bias = INITIAL_BIAS; int bias = INITIAL_BIAS;
final StringBuilder output = new StringBuilder();
int d = input.lastIndexOf(DELIMITER); int d = input.lastIndexOf(DELIMITER);
final StringBuilder output = new StringBuilder(d + 1);
if (d > 0) { if (d > 0) {
for (int j = 0; j < d; j++) { for (int j = 0; j < d; j++) {
final char c = input.charAt(j); final char c = input.charAt(j);

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

@ -644,11 +644,11 @@ dc_rights
long docTextLength = 0; long docTextLength = 0;
final ByteBuffer content = new ByteBuffer(); final ByteBuffer content = new ByteBuffer();
final StringBuilder authors = new StringBuilder(); final StringBuilder authors = new StringBuilder(80);
final StringBuilder publishers = new StringBuilder(); final StringBuilder publishers = new StringBuilder(80);
final StringBuilder subjects = new StringBuilder(); final StringBuilder subjects = new StringBuilder(80);
final StringBuilder title = new StringBuilder(); final StringBuilder title = new StringBuilder(80);
final StringBuilder description = new StringBuilder(); final StringBuilder description = new StringBuilder(80);
final LinkedList<String> sectionTitles = new LinkedList<String>(); final LinkedList<String> sectionTitles = new LinkedList<String>();
final Map<MultiProtocolURI, String> anchors = new HashMap<MultiProtocolURI, 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 // so cut it here at both ends at once
assert maxpos >= minpos; assert maxpos >= minpos;
final int newlen = Math.max(10, maxpos - minpos + 10); final int newlen = Math.max(10, maxpos - minpos + 10);
assert maxLength >= newlen: "maxLength = " + maxLength + ", newlen = " + newlen;
final int around = (maxLength - newlen) / 2; 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 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() + " [..]"; 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; private final InputStream stream;
public SurrogateReader(final InputStream stream, int queueSize) throws IOException { public SurrogateReader(final InputStream stream, int queueSize) throws IOException {
this.buffer = new StringBuilder(); this.buffer = new StringBuilder(300);
this.parsingValue = false; this.parsingValue = false;
this.surrogate = null; this.surrogate = null;
this.elementName = 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); throw new Parser.Failure("error in docParser, WordTextExtractorFactory: " + e.getMessage(), location);
} }
final StringBuilder contents = new StringBuilder(); final StringBuilder contents = new StringBuilder(80);
try { try {
contents.append(extractor.getText().trim()); contents.append(extractor.getText().trim());
contents.append(" "); contents.append(' ');
contents.append(extractor.getHeaderText()); contents.append(extractor.getHeaderText());
contents.append(" "); contents.append(' ');
contents.append(extractor.getFooterText()); contents.append(extractor.getFooterText());
} catch (Exception e) { } catch (Exception e) {
throw new Parser.Failure("error in docParser, getText: " + e.getMessage(), location); 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() { private boolean testForPs2Ascii() {
try { try {
String procOutputLine = null; 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 Process ps2asciiProc = Runtime.getRuntime().exec(new String[]{"ps2ascii", "--version"});
final BufferedReader stdOut = new BufferedReader(new InputStreamReader(ps2asciiProc.getInputStream())); final BufferedReader stdOut = new BufferedReader(new InputStreamReader(ps2asciiProc.getInputStream()));

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

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

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

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

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

@ -1018,7 +1018,7 @@ public class RowCollection implements Iterable<Row.Entry>, Cloneable {
} }
public synchronized String toString() { public synchronized String toString() {
final StringBuilder s = new StringBuilder(); final StringBuilder s = new StringBuilder(80);
final Iterator<Row.Entry> i = iterator(); final Iterator<Row.Entry> i = iterator();
if (i.hasNext()) s.append(i.next().toString()); if (i.hasNext()) s.append(i.next().toString());
while (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 { public final class MiniLogFormatter extends SimpleFormatter {
private final StringBuilder buffer = new StringBuilder(); private final StringBuilder buffer = new StringBuilder(80);
public MiniLogFormatter() { public MiniLogFormatter() {
super(); super();

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

@ -602,7 +602,7 @@ public final class FileUtils {
* @return String representation of the file content. * @return String representation of the file content.
*/ */
public static String getListString(final File listFile, final boolean withcomments){ public static String getListString(final File listFile, final boolean withcomments){
final StringBuilder temp = new StringBuilder(); final StringBuilder temp = new StringBuilder(300);
BufferedReader br = null; BufferedReader br = null;
try{ try{
@ -726,7 +726,7 @@ public final class FileUtils {
* @return returns <code>true</code> if successful, <code>false</code> otherwise * @return returns <code>true</code> if successful, <code>false</code> otherwise
*/ */
public static boolean writeList(final File listFile, final String[] list){ 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++){ for(int i=0;i < list.length; i++){
out.append(list[i]).append(CR).append(LF); 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) { public static String set2string(final Set<String> s, final String separator, final boolean braces) {
final StringBuilder buf = new StringBuilder(); final StringBuilder buf = new StringBuilder(s.size() * 40 + 1);
if (braces) buf.append("{"); if (braces) buf.append('{');
final Iterator<String> i = s.iterator(); final Iterator<String> i = s.iterator();
boolean hasNext = i.hasNext(); boolean hasNext = i.hasNext();
while (hasNext) { while (hasNext) {
@ -118,7 +118,7 @@ public final class MapTools {
hasNext = i.hasNext(); hasNext = i.hasNext();
if (hasNext) buf.append(separator); if (hasNext) buf.append(separator);
} }
if (braces) buf.append("}"); if (braces) buf.append('}');
return new String(buf); return new String(buf);
} }

@ -218,7 +218,7 @@ public class WorkflowProcessor<J extends WorkflowJob> {
} }
public String getChilds() { 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++) { for (int i = 0; i < this.childs.length; i++) {
s.append(this.childs[i]); s.append(this.childs[i]);
s.append(' '); s.append(' ');

Loading…
Cancel
Save