[
http://issues.apache.org/jira/browse/AXIS-2597?page=comments#action_12457017 ]
Elwin Ho commented on AXIS-2597:
--------------------------------
It takes around 1500 ms to generate 10 ids. It is way to slow to use compare to
(java.rmi.server.UID only take 3 ms for 10 ids)
Env.
PM 1.8 hz.
Java 1.4
2G memory.
long elwin_startTime = System.currentTimeMillis();
for (int i=0; i<10; i ++)
{
suuidg.nextUUID();
}
System.out.println("take "
+
((System.currentTimeMillis()-elwin_startTime))
+ " ms");
> 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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]