axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Elwin Ho (JIRA)" <axis-...@ws.apache.org>
Subject [jira] Created: (AXIS-2597) CLONE -SimpleUUIDGen.nextUUID() is very, very, very slow
Date Fri, 08 Dec 2006 23:59:20 GMT
CLONE -SimpleUUIDGen.nextUUID() is very, very, very slow
--------------------------------------------------------

                 Key: AXIS-2597
                 URL: http://issues.apache.org/jira/browse/AXIS-2597
             Project: Apache Axis
          Issue Type: Bug
    Affects Versions: 1.1
         Environment: Any
            Reporter: Elwin Ho


It takes .4917 seconds to generate just one UUID.  (Yes, seconds.)  This renders the feature
very nearly useless.

In SimpleUUIDGen, there is a simple, but very expensive, bug..  It creates a new instance
of SecureRandom on each call to nextUUID().  Making a new instance of SecureRandom is very
expensive because it has to set up the environment for producing cryptographically strong
random numbers.

The instance of SecureRandom should be in a static variable and init'ed just once.  Then,
you call getNextLong() when you want another number from it.  It would be much faster that
way without compromising the integrity of the UUIDs generated.

BTW, If you look at the comment I copied from the code, it appears that this is what the developer
meant to make the SecureRandom instance static, but forgot.

    /**
     * Creates a new UUID. The algorithm used is described by The Open Group.
     * See <a href="http://www.opengroup.org/onlinepubs/009629399/apdxa.htm">
     * Universal Unique Identifier</a> for more details.
     * <p>
     * Due to a lack of functionality in Java, a part of the UUID is a secure
     * random. This results in a long processing time when this method is called
     * for the first time.
     */


Here's a proposed fix.  In the member variables, add the following.

    private static Random secureRandom = null;
    static {
        try {
            secureRandom = SecureRandom.getInstance("SHA1PRNG", "SUN");
        } catch (Exception e) {
            secureRandom = new Random();
        }
    }


The, remove the code near line 235 where the SecureRandom is being created.  

This change should do it just once.




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

        

---------------------------------------------------------------------
To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org


Mime
View raw message