[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-2122) optimization patch based on pmd rules

Xavier Le Vourch (JIRA) noreply at atlassian.com
Sat Sep 30 14:10:24 EDT 2006


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-2122?page=comments#action_24688 ] 

Xavier Le Vourch commented on HHH-2122:
---------------------------------------

No I did not perform a performance test but I guess you already knew that...

My main motivation was to test the new rules and patches for false positives I sent to the PMD project that have been integrated in the current dev version. To do so, I'm running tests on several open source libraries and as a side effect, I'm sending patches to the relevant projects containing fixes for a few of the detected problems.

If you look closely, there's no change in the API. It's just avoiding creating temporary objects, avoiding unneeded String objects in the generated byte code or doing checks that are not needed based on the Java specification.

Anyway, you can discard the patch if you do not want to integrate it.

Below I'll list a short explanation of the perceived advantages I see in the changes.

Xavier



Double.valueOf(x).doubleValue() -> Double.parseDouble(x)
  temporary Double is not created

append("x") -> append('x')
  string is not stored in byte code, adding a char is also less complex

x != null && x instanceof X -> x instanceof X
  Java spec

list.toArray uses correctly sized array as argument
  temporary zero sized array not created

new String(str) -> str
  useless copy of immutable object

if (expr == false) -> if (!expr)
  OK, that one is not really needed but the fact that it appears only once means that
  it's not really a standard construct in your code base

append(s1 + s2) -> append(s1).append(s2)
  temporary StringBuffer object created for "s1 + s2" and then added to the enclosing
  StringBuffer.

loop over array to add to list -> list.addAll(Arrays.asList(<array>))
  less complex, less prone to error in loop

extra ; removed
  again appears only once. Depending on context, extra ; can change behavior, not in this
  case though.

name.toLowerCase().equals("rowid") -> name.equalsIgnoreCase("rowid")
  temporary String object created, appears only once, equalsIgnoreCase() used elsewhere

use of System.arraycopy instead of loop
  arraycopy is native and should be the faster way to copy the array. resulting Java code
  is also less complex and more maintainable.



> optimization patch based on pmd rules
> -------------------------------------
>
>          Key: HHH-2122
>          URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-2122
>      Project: Hibernate3
>         Type: Patch

>  Environment: latest svn source
>     Reporter: Xavier Le Vourch
>     Priority: Minor
>  Attachments: Optimizations.patch
>
>
> I've run pmd with a custom ruleset and made a few optimization changes:
> Double.valueOf(x).doubleValue() -> Double.parseDouble(x)
> append("x") -> append('x')
> x != null && x instanceof X -> x instanceof X
> list.toArray uses correctly sized array as argument
> new String(str) -> str
> if (expr == false) -> if (!expr)
> append(s1 + s2) -> append(s1).append(s2)
> loop over array to add to list -> list.addAll(Arrays.asList(<array>))
> extra ; removed
> name.toLowerCase().equals("rowid") -> name.equalsIgnoreCase("rowid")
> use of System.arraycopy instead of loop
> I could break the patch in several parts if that makes it easier to analyze.
> Xavier

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira




More information about the hibernate-issues mailing list