Re: [JGIT PATCH 09/13] Replace inefficient new String(String) constructor to silence FindBugs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Robin Rosenberg <robin.rosenberg.lists@xxxxxxxxxx> wrote:
> tisdag 28 april 2009 23:12:22 skrev "Shawn O. Pearce" <spearce@xxxxxxxxxxx>:
> > FindBugs keeps reporting that our usage of new String(String)
> > is not the most efficient way to construct a string.
> 
> I think we should find better ways of silencing FindBugs,, than addiing obscure
> coding patterns that are worse than what FindBugs warns against. 

Heh.  Yea, well...  I also wasn't too happy with FindBugs for
this one.

As far as I can tell there isn't anything in the documentation that
suggests that new String(String) behaves the way I want it to here.

It seems a JRE may be free to reuse the same internal char[] as
the source string, and just produce a new String wrapper.  What I
really want is a deep copy of that char[] to shed what I know is
garbage around the interesting part.

The use of StringBuilder makes this sort of anti-optimization
more difficult, as most JRE implementations would likely
assume they should alloc the internal char[] at the size
given in the constructor, and will deep-copy the chars during
append(String,int,int) because they would expect to see more
characters appended after this append call.

Perhaps the only way to really enforce the behavior I want here is
to convert the String segment to a char[], and then convert that
char[] into a String.  Ick, that's two copies.

Maybe we just stick a comment here.  Two different people have
come up with the same FindBugs issue, trying to get them to share
configuration files sounds hard.
 
> Options are: 
> 	Add a comment 
> 	Customize findbugs rules
> 	Findbugs specific annotations

-- 
Shawn.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]