git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Shawn O. Pearce" <spearce@spearce.org>
To: Robin Rosenberg <robin.rosenberg@dewire.com>
Cc: git@vger.kernel.org, Yann Simon <yann.simon.fr@gmail.com>,
	Matthias Sohn <matthias.sohn@sap.com>
Subject: [JGIT PATCH 03/11] Replace inefficient new String(String) constructor to silence FindBugs
Date: Wed, 29 Apr 2009 11:54:40 -0700	[thread overview]
Message-ID: <1241031288-23437-4-git-send-email-spearce@spearce.org> (raw)
In-Reply-To: <1241031288-23437-3-git-send-email-spearce@spearce.org>

FindBugs keeps reporting that our usage of new String(String)
is not the most efficient way to construct a string.

http://thread.gmane.org/gmane.comp.version-control.git/113739/focus=113787
> I had a specific reason for forcing a new String object here.
>
> The line in question, p, is from the packed-refs file and
> contains the entire SHA-1 in hex form at the beginning of it.
> We've converted that into binary as an ObjectId, it uses 1/4 the
> space of the string portion.
>
> The Ref object, its ObjectId, and its name string, are going to be
> cached in a Map, probably long-term.  We're better off shedding the
> 80 bytes of memory used to hold the hex SHA-1 then risk substring()
> deciding its "faster" to reuse the char[] then to make a copy of it.

Another way to force this new unique String instance with its own
private char[] is to use a StringBuilder and append onto it the
ref name.  This shouldn't be a warning for FindBugs, but it would
accomplish the same goal of producing 1 clean copy, with no extra
transient temporary array.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
CC: Yann Simon <yann.simon.fr@gmail.com>
CC: Matthias Sohn <matthias.sohn@sap.com>
---

 Unchanged.

 .../src/org/spearce/jgit/lib/RefDatabase.java      |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/RefDatabase.java b/org.spearce.jgit/src/org/spearce/jgit/lib/RefDatabase.java
index 87f26bf..bccf2d0 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/lib/RefDatabase.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/RefDatabase.java
@@ -447,7 +447,8 @@ private synchronized void refreshPackedRefs() {
 
 					final int sp = p.indexOf(' ');
 					final ObjectId id = ObjectId.fromString(p.substring(0, sp));
-					final String name = new String(p.substring(sp + 1));
+					final String name = new StringBuilder(p.length() - (sp + 1))
+							.append(p, sp + 1, p.length()).toString();
 					last = new Ref(Ref.Storage.PACKED, name, name, id);
 					newPackedRefs.put(last.getName(), last);
 				}
-- 
1.6.3.rc3.199.g24398

  reply	other threads:[~2009-04-29 18:55 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-04-29 18:54 [JGIT PATCH v2 00/11] WindowCache rewrite... with tests Shawn O. Pearce
2009-04-29 18:54 ` [JGIT PATCH 01/11] Fix more computation of integer average overflows Shawn O. Pearce
2009-04-29 18:54   ` [JGIT PATCH 02/11] Fix performance problem recently introduced to DeltaPackedObjectLoader Shawn O. Pearce
2009-04-29 18:54     ` Shawn O. Pearce [this message]
2009-04-29 18:54       ` [JGIT PATCH 04/11] Replace inefficient new Long(long) constructor to silence FindBugs Shawn O. Pearce
2009-04-29 18:54         ` [JGIT PATCH 05/11] Change IndexPack to use ObjectIdSubclassMap instead of ObjectIdMap Shawn O. Pearce
2009-04-29 18:54           ` [JGIT PATCH 06/11] Use getCachedBytes in IndexPack to avoid an unnecessary copy Shawn O. Pearce
2009-04-29 18:54             ` [JGIT PATCH 07/11] Remove ObjectIdMap from the JGit library Shawn O. Pearce
2009-04-29 18:54               ` [JGIT PATCH 08/11] Don't use ByteWindows when checking pack file headers/footers Shawn O. Pearce
2009-04-29 18:54                 ` [JGIT PATCH v2 09/11] Rewrite WindowCache to be easier to follow and maintain Shawn O. Pearce
2009-04-29 18:54                   ` [JGIT PATCH 10/11] Add tests for WindowCache.reconfigure cases Shawn O. Pearce
2009-04-29 18:54                     ` [JGIT PATCH 11/11] Add tests to increase coverage of WindowCache Shawn O. Pearce
2009-04-29 23:46 ` [JGIT PATCH v2 00/11] WindowCache rewrite... with tests Robin Rosenberg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1241031288-23437-4-git-send-email-spearce@spearce.org \
    --to=spearce@spearce.org \
    --cc=git@vger.kernel.org \
    --cc=matthias.sohn@sap.com \
    --cc=robin.rosenberg@dewire.com \
    --cc=yann.simon.fr@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).