Подсказки о записи микро сравнительных тестов от создателей 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.
Когда я это сделал они вошли в систему от моего имени (я ввел свой пользователь / пароль) и просматривали фотоальбомы с помощью ожидаемого HTML.
Были некоторые юридические вещи, которые я должен был «принять», и был уведомлен о том, что они будут делать с моими данными.
Конечно, вы можете получать фотографии от пользователей, которые добавили ваше приложение и согласились поделиться такой информацией. Сначала вы получаете альбомы с помощью вызова API photos_getAlbums, затем вы можете перебирать идентификаторы альбомов и вызывать photos_get для получения фотографий для альбомов.
/ **
* get_albums ()
*
* @param long $ uid
* @return массив
* /
функция get_albums ($ uid = null)
{
если (пусто ($ uid))
$ uid = $ _REQUEST ['fb_sig_user'];
пытаться
{
return $ facebook-> api_client-> photos_getAlbums ($ uid, null);
}
catch (FacebookRestClientException $ ex)
{
вернуть массив ();
}
}
/ **
* get_photos ()
*
* @param bool $ bool_pids
* @param mixed $ aids (массив идентификаторов альбомов или ноль)
* @return массив
* /
функция get_photos ($ bool_pids = true, $ aids = null, $ pids = null)
{
пытаться
{
$ p = $ facebook-> api_client-> photos_get (null, $ aids, $ pids);
}
catch (FacebookRestClientException $ ex)
{
}
if ($bool_pids)
{
$pids = array();
if (!empty($p))
foreach($p as $p0)
$pids[] = $p0['pid'];
return $pids;
}
else
return $p;
}