Почему мой UUID использует слишком много времени? - PullRequest
0 голосов
/ 04 мая 2009
String s = UUID.randomUUID().toString(); 
return s.substring(0,8) + s.substring(9,13) + s.substring(14,18) +
       s.substring(19,23) + s.substring(24); 

Я использую UUID JDK1.5, но он использует слишком много времени, когда я подключаюсь / отключаюсь от сети.
Я думаю, что UUID может захотеть получить доступ к некоторой сети.
Кто-нибудь может мне помочь?

Ответы [ 6 ]

2 голосов
/ 04 мая 2009

Цитирование API odc :

public static UUID randomUUID()

Статическая фабрика для получения UUID типа 4 (псевдослучайно сгенерированного). UUID генерируется с использованием криптографически сильный псевдослучайный генератор чисел.

Ваша задержка, вероятно, вызвана инициализацией криптографически стойкого ГСЧ - это занимает некоторое время и может даже зависеть от наличия сетевого соединения как источника энтропии. Однако это должно произойти только один раз во время выполнения JVM. Однако я не вижу пути решения этой проблемы.

2 голосов
/ 04 мая 2009

Генерация UUID выполняется локально и не требует подключения к сети.

0 голосов
/ 14 декабря 2011

В более старых версиях Java (возможно, в 6 и более ранних версиях) есть ошибка в Random, которая заставляет его перебирать весь каталог temp. Мы видели, как генерация семени занимала 10 минут на некоторых чрезвычайно плохих сборочных машинах в NVIDIA. Возможно, вы захотите проверить размер вашего временного каталога.

Сравнить: http://www.docjar.com/html/api/sun/security/provider/SeedGenerator.java.html Кому: http://www.java2s.com/Open-Source/Java-Document/6.0-JDK-Modules/j2me/sun/security/provider/SeedGenerator.java.htm

0 голосов
/ 30 октября 2009

Если вы добавляете 5 строк вместе к большому набору данных, это может быть проблемой. Попробуйте использовать StringBuffer. Удивительно, что может иметь значение при объединении более 1-2 строк вместе, особенно для больших наборов данных

0 голосов
/ 07 мая 2009

Какова цель этих вызовов s.substring? Похоже, вы возвращаете исходную строку.

0 голосов
/ 04 мая 2009

Javadoc для UUID http://java.sun.com/j2se/1.5.0/docs/api/java/util/UUID.html содержит полезную информацию о том, как генерируется UUID. Он использует время и тактовую частоту для генерации UUID. Как говорит sharptooth, сетевой интерфейс не требуется. Возможно, запущен какой-то другой параллельный процесс, который может быть причиной этой проблемы?

...