Рубрика «performance» - 17

Да, это целая статья по самому обычному switch в JDK 7. Бывает так, что накопленный материал кажется интересным и малоизвестным, а потом оказывается, что любая бабка у подъезда уже 50 лет знает об особенностях реализации switch. Но я попробую. Для затравки, предлагаю 3 вопроса:

  1. (Простой) Каков результат работы этого кода?
    switch(5){
    default: System.out.print(0);
    case 1: System.out.print(1); break;
    case 4: System.out.print(4);
    case 2: System.out.print(2);
    }

  2. Следующие 2 варианта практически одинаковы. Немного отличаются литералами.
    //Вариант 1
    switch("BBBBBB"){
    case "AaAaAa": break; 
    case "AaAaBB": break;
    case "AaBBAa": break;
    case "AaBBBB": break;
    case "BBAaAa": break;
    case "BBAaBB": break;
    case "BBBBAa": break;
    case "BBBBBB": break;
    }
    //Вариант 2
    switch("BBBBBB_8"){
    case "AaAaAa_1": break;
    case "AaAaBB_2": break;
    case "AaBBAa_3": break;
    case "AaBBBB_4": break;
    case "BBAaAa_5": break;
    case "BBAaBB_6": break;
    case "BBBBAa_7": break;
    case "BBBBBB_8": break;
    }

    Почему первый switch выполняется в несколько раз медленнее, по крайней мере, с отключенным JIT (-Djava.compiler=NONE)? Сами проверьте в цикле! JIT таким кодом не проведешь, но если немного пошаманить, то небольшая разница будет заметна.

  3. Какова вычислительная сложность алгоритма нахождения совпадающего значения среди n case-ов (по крайней мере, в JDK 7)?

Читать полностью »

Предположим, что у вас есть таблица с большим количеством записей и в неё нужно добавить один или несколько индексов со следующими условиями:

  1. их генерация должна быть максимально быстрой
  2. чтобы генерацию можно было производить порциями.
    К примеру, если есть таблица на 300М записей и работы с ней можно производить только в нерабочее время, то чтобы можно было разбить весь процесс на три ночи по 100М записей
  3. появление новых индексов и сам процесс их генерации не должны мешать текущей работе с классом/таблицей

Для этого можно было бы воспользоваться уже известным методом %BuildIndices(), но в таком случае это не будет удовлетворять нашим условиям.

Каков же выход?
Читать полностью »

Не так давно была статья о выходе js-yaml 2.0.0, который был полностью написан на JS и при этом работал весьма быстро. И только недавно я узнал, насколько же все хорошо на самом деле :). А началось все с того, что знакомый пожаловался на руби, который долго парсил 7-мегабайтный yaml-файл. Это было довольно странно, потому что руби использует биндинги к libyaml. Мы написали несколько примитивных тестов для руби с питоном, и получили такие результаты, что я заподозрил ошибку.

Тогда создал тему на LOR, там нашли пару косяков и добавили примеров с других языков. Картину мира это улучшило, но не сильно. JS подозрительно быстр. Результат ниже, а в конце пара замечаний.
Читать полностью »

Как мы создавали кластер из Raspberry PiСовсем скоро в Лондоне пройдет известная конференция WSO2Con 2013. И её ведущим будет Эбен Аптон (Eben Upton) — основатель и попечитель фонда Raspberry Pi Foundation.

Как все однажды началось...

Raspberry Pi будоражит умы гиков с тех самых пор, как была первый раз анонсирована. Мы были взволнованы услышать о том, что Эбен будет представлять конференцию и ещё больше удивлены, когда Sanjiva (прим. пер.: CEO WSO2, главный организатор конференции) предложил нам разместить бэкенд официального приложения WSO2Con на кластере из Raspberry Pi. Предложил что? Да, он всегда полон безумных идей. Первое совещание прошло 23 декабря 2012, за день перед уходом команды на рождественские каникулы. В то время мы даже не были уверены, возможно ли вообще запустить enterprise middleware на Raspberry Pi. Но исследование неизведанного — это обычное дело для WSO2, и достижение недостижимого — то, что мы делаем здесь на регулярной основе. Таким образом, группа отважных гиков бросила вызов созданию такой системы. Проект официально сдвинулся с мёртвой точки 2 января этого года.
Читать полностью »

Привет. Я бывший разработчик, ставший администратором баз данных, и ниже написал о том, что, в своё время, хотел бы услышать сам.

7. Производительность UDF оставляет желать лучшего

Хорошие разработчики любят повторно использовать код, помещая его в функции и вызывая эти функции из разных мест. Это отлично работает на уровне приложения, но на уровне баз данных может привести к огромным проблемам с производительностью.

Посмотрите этот пост о принудительном использовании параллелизма – в частности, список того, что приводит к генерации «однопоточного» плана выполнения запроса. Скорее всего, использование UDF приведёт к тому, что ваш запрос будет выполняться в одном потоке (*грустно вздыхает*).
Читать полностью »

NUMизматика, NUMерология и просто о NUMANUMA (Non-Uniform Memory Access — «Неравномерный доступ к памяти» или Non-Uniform Memory Architecture — «Архитектура с неравномерной памятью») — технология совсем не новая. Я бы даже сказала, что совсем старая. То есть, в терминах музыкальных инструментов, это уже даже не баян, а, скорее, варган.
Но, несмотря на это, толковых статей, объясняющих, что это, а главное, как с этим эффективно работать, нет. Данный пост, исправляющий эту ситуацию, предназначен прежде всего для тех, кто ничего не знает про NUMA, но также содержит кое-что интересное и для знатоков-NUMизматов, а главное, он облегчает жизнь мне, инженеру Intel, так как отныне всех интересующихся NUMA русскоязычных разработчиков буду отсылать к нему.
Читать полностью »

Привет,

Грядёт JavaOne Russia 2013 в Москве! Уже давно открыт публичный Call For Papers, где до 15 февраля каждый желающий может заявить свой доклад. В этом посте мы размышляем над темами наших докладов. Пока что у нас такие предположения, и, продолжая традицию, будем рады услышать обратную связь от сообщества, что бы вам хотелось услышать больше, глубже и новее:
Читать полностью »

Откуда растут ноги у hashCodeОпять на собеседованиях по Java спрашивают про hashCode и equals? А кто из собеседующих сам ответит на вопрос, как вычисляется Object.hashCode() и System.identityHashCode()? Насколько дорог вызов этих методов? Как их можно ускорить в HotSpot JVM? Держу пари, едва ли кто даст правильный ответ. Разве что, кто прочитает эту статью.
Читать полностью »

Совсем недавно во многих ruby-блогах, сообществах, да и на хабре, было написано немало постов о том что RVM дурно влияет на производительность RMI-версии ruby (официальный интерпритатор языка) по причине того что установщик не учитывает оптимизации компилятора GCC. Конечно для этого недуга были «лекарства», но применять их приходилось ручками, причем довольно-таки прямыми. Так вот, спешу всех обрадовать что в последних версиях RVM (начиная с версии 1.17.0) ситуация изменилась, и конечно же в лучшую сторону, теперь Вы снова можете полностью положится на менеджера версий ruby. Все что Вам нужно сделать — это обновиться до последней версии.
Читать полностью »

Параметр thread_cache_size играет немаловажную роль в производительности нагруженного MySQL-сервера. В некоторых случаях можно увеличить производительность на 30-50%.

Этот параметр указывает количество тредов, уходящих в кеш при отключении клиента. При новом подключении тред используется из кеша, что позволяет экономить ресурсы при больших нагрузках.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js