при условии, что я понял правильно, вы должны искать binascii.unhexlify
import binascii
a='45222e'
s=binascii.unhexlify(a)
b=[ord(x) for x in s]
Подсказки о записи микро сравнительных тестов от создателей Java HotSpot:
Правило 0: читает уважаемую газету на JVMs и микросравнительном тестировании. Хороший - Brian Goetz, 2005. Не ожидайте слишком много от микросравнительных тестов; они измеряют только ограниченный диапазон рабочих характеристик JVM.
Правило 1: Всегда включают фазу прогрева, которая выполняет Ваше тестовое ядро полностью через, достаточно для инициирования всех инициализаций и компиляций прежде, чем синхронизировать фазу (фазы). (Меньше повторений в порядке на фазе прогрева. Эмпирическое правило является несколькими десятками тысяч повторений внутреннего цикла.)
Правило 2: Всегда выполняемый с -XX:+PrintCompilation
, -verbose:gc
, и т.д., таким образом, можно проверить, что компилятор и другие части JVM не делают неожиданной работы во время фазы синхронизации.
Правило 2.1: Печать обменивается сообщениями вначале и конец фаз синхронизации и прогрева, таким образом, можно проверить, что нет никакого вывода от Правила 2 во время фазы синхронизации.
Правило 3: знать о различии между -client
и -server
, и OSR и регулярные компиляции. -XX:+PrintCompilation
флаг сообщает, что компиляции OSR со знаком at-sign обозначают неначальную точку входа, например: Trouble$1::run @ 2 (41 bytes)
. Предпочтите сервер клиенту, и регулярный к OSR, если Вы после лучшей производительности.
Правило 4: знать об эффектах инициализации. Не печатайте впервые во время Вашей фазы синхронизации, начиная с печати загрузок, и инициализирует классы. Не загружайте новые классы за пределами фазы прогрева (или фаза создания отчетов финала), если Вы не тестируете класс, загружающийся конкретно (и в этом случае загрузите только тестовые классы). Правило 2 является Вашим первым оборонительным рубежом против таких эффектов.
Правило 5: знать о deoptimization и эффектах перекомпиляции. Не берите путь выполнения кода впервые в фазе синхронизации, потому что компилятор может выбросить и перекомпилировать код, на основе более раннего оптимистического предположения, что путь не был используемым вообще. Правило 2 является Вашим первым оборонительным рубежом против таких эффектов.
Правило 6: Использование соответствующие инструменты, чтобы прочитать мысли компилятора и ожидать быть удивленным кодом это производит. Осмотрите код сами перед формирующимися теориями о том, что делает что-то быстрее или медленнее.
Правило 7: Уменьшают шум в Ваших измерениях. Выполните свой сравнительный тест на тихой машине и несколько раз выполняйте его, отбрасывая выбросы. Используйте -Xbatch
, чтобы сериализировать компилятор с приложением и полагать, что установка -XX:CICompilerCount=1
препятствует тому, чтобы компилятор работал параллельно с собой. Старайтесь изо всех сил уменьшать GC наверху, устанавливать Xmx
(достаточно большой), равняется Xms
, и используйте UseEpsilonGC
, если это доступно.
Правило 8: Пользуются библиотекой для Вашего сравнительного теста, поскольку это, вероятно, более эффективно и было уже отлажено для этой единственной цели. Такой как [1 114] JMH, Кронциркуль или счет и Превосходные Сравнительные тесты UCSD Paul для Java.
При попытке сравнить два алгоритма, сделайте по крайней мере два сравнительных теста для каждого, чередовав порядок. т.е.:
for(i=1..n)
alg1();
for(i=1..n)
alg2();
for(i=1..n)
alg2();
for(i=1..n)
alg1();
я нашел некоторые заметные различия (5-10% иногда) во времени выполнения того же алгоритма в различных передачах..
кроме того, удостоверьтесь, что n является очень большим, так, чтобы время выполнения каждого цикла было по крайней мере 10 секундами или около этого. Больше повторений, более значащие цифры в Ваше время сравнительного теста и более надежное, которое данные.
сравнительный тест должен измерить время/повторение или повторения/время, и почему?
Это зависит от , что Вы пытаетесь протестировать.
, Если Вы интересуетесь задержка , используйте время/повторение и если Вы интересуетесь пропускная способность , используйте повторения/время.
Удостоверьтесь, что Вы так или иначе используете результаты, которые вычисляются в сравниваемом коде. Иначе Ваш код может быть оптимизирован далеко.
Важные вещи для сравнительных тестов Java:
System.gc()
между повторениями, это - хорошая идея выполнить его между тестами, так, чтобы каждый тест, надо надеяться, заставил "чистое" пространство памяти работать с. (Да, gc()
больше подсказки, чем гарантия, но это очень вероятно , что она действительно соберет "мусор", по моему опыту.) я нахожусь только в процессе блоггинга о дизайне платформы сравнительного тестирования в.NET. Я имею пара из более ранние сообщения , который может давать Вам некоторое представление - не все будет соответствующим, конечно, но часть ее может быть.
Существует много возможных ловушек для записи микросравнительных тестов в Java.
Сначала: необходимо вычислить со всеми видами событий, которые занимают время более или менее случайные: Сборка "мусора", кэшируя эффекты (ОС для файлов и ЦП для памяти), IO и т.д.
112-секундный: Вы не можете доверять точности измеренных времен для очень коротких интервалов.
Треть: JVM оптимизирует Ваш код при выполнении. Таким образом, различные выполнения в том же экземпляре JVM станут быстрее и быстрее.
Мои рекомендации: Сделайте свой контрольный прогон несколькими секундами, который более надежен, чем время выполнения по миллисекундам. Нагрейтесь JVM (означает выполнять сравнительный тест, по крайней мере, однажды без измерения, что JVM может выполнить оптимизацию). И выполненный Ваш сравнительный тест многократно (возможно, 5 раз) и берут среднее значение. Работайте каждый микросравнительный тест в новом экземпляре JVM (призовите к каждому сравнительному тесту новый Java), иначе, эффекты оптимизации JVM могут влиять позже на запускающие тесты. Не выполняйте вещи, которые не выполняются в фазе прогрева (поскольку это могло инициировать загрузку класса и перекомпиляцию).