Шлюхи без блекджека, блекджек без шлюх. Войти !bnw Сегодня Клубы
Привет, TbI — HRWKA! 1239.0 пользователей не могут ошибаться!
?6946
прекрасное6443
говно5907
говнорашка5512
хуита4716
anime3066
linux2654
music2635
bnw2602
рашка2565
log2356
ололо2178
дунч1832
pic1815
сталирасты1491
украина1439
быдло1437
bnw_ppl1421
дыбр1238
гімно1158

http://ideone.com/xTl9Uw

#WSQ3T8 (0) / @hirthwork / 3683 дня назад
> Декомпилятор > Чтобы избавить пользователей от необходимости устанавливать дополнительные плагины, в инструментарий IDE был добавлен декомпилятор для Java-классов. Теперь посмотреть код библиотеки можно, даже если у вас нет исходников. http://habrahabr.ru/company/JetBrains/blog/242395/ Forced open source. Збс. Олсо удачи им там со Scala и Clojure.
#NC6IVO (2) / @minoru / 3696 дней назад

Нужно быть очень аккуратными при закрытии сокета, дорогой читатель. https://img-fotki.yandex.ru/get/2914/5598601.2/0_dd789_37c4253d_orig.png

#HYPAL0 (4+2) / @hirthwork / 3702 дня назад
Оказывается, в Unsafe в Java8 появилась возможность явно поставить load/store/full memory fence
#7SCF7W (1) / @hirthwork / 3717 дней назад
Продолжаем серию охуительных историй про производительность простейших операций Итак, есть бенчмарк, который просто обходит большой массив и суммирует элементы http://ideone.com/UtpVej Запускаем под последней оракловой jvm: $ /opt/oracle-jdk-bin-1.8.0.20/bin/java Iter 100000000 0 -10621346557024: 43 $ /opt/oracle-jdk-bin-1.8.0.20/bin/java Iter 100000000 1 -10621346557024: 42 $ /opt/oracle-jdk-bin-1.8.0.20/bin/java Iter 100000000 2 -10621346557024: 48 Казалось бы логично — обход массиве в обратном направлении не cache-friendy Запускаем под айбиэмовской машиной: $ /opt/ibm/java-x86_64-71/bin/java Iter 100000000 0 -10621346557024: 107 $ /opt/ibm/java-x86_64-71/bin/java Iter 100000000 1 -10621346557024: 98 $ /opt/ibm/java-x86_64-71/bin/java Iter 100000000 2 -10621346557024: 90 Если отбросить тот факт, что работает медленно, можно отметить, что реализация обратного обхода и должна была работать быстрее, потому что в байткоде видно, что размер массива загружается всего один раз, а в реализации с прямым циклом по массиву его приходится получать каждый раз. В общем, я продолжаю охуевать от айбиэмовских jvm и продолжаю их использовать в силу более быстрого gc
#VK33HN (8) / @hirthwork / 3725 дней назад
#7BPTIP (0) / @hirthwork / 3730 дней назад
хвала утилите checkstyle и позор криворуким долбоёбам (мне). написал в коде: ```java if (cancelled) { throw new CancellationException(); } if (exception == null) { return result; } ``` Видите ошибку? А я вот в двенадцатом часу ночи не увидел: `EnterpriseShit.java:60: if at indentation level 10 not at correct indentation, 8`
#S7GBT7 (2) / @hirthwork / 3731 день назад
специально для @lord: http://ideone.com/qG6C2N tl;dr: стандартная работа со временем в go такая же медленная как в джаве, а joda-time — рулит
#VCCSPV (11+1) / @hirthwork / 3731 день назад
Понадобилось мне из секунд с начала эпохи™ получать год и месяц. Итерация №0: Берём java.util.Calendar, делаем .setTimeMillis(...), делаем .get(Calendar.YEAR) и .get(Calendar.MONTH) (не забываем месяц на единицу увеличивать) Исследование №1: Запускаем под JProfiler, видим, что 16.3% времени занимает извлечение даты. Печалимся. Итерация №1: Видим, что в папке lib/ проекта уже лежит joda-time-2.0.jar. Делаем date = new DateTime(millis) и .get(DateTimeFieldType.year()) и .get(DateTimeFieldType.month()). Исследование №2: Запускаем под JProfiler, видим, что извлечение даты занимает уже 12.7%. «И увидел Бог, что это хорошо». Исследование №3: Хочется понять насколько реально быстрее работает joda-time: 1. Качаем joda-time-2.4 2. Пишем небольшой бенчмарк. 3. Запускаем 10kk итераций. Видим, что Calendar выполняет их за 789 мс, а joda-time — за 1126 мс. 4. Охуеваем 5. Чешем репу 6. Копируем из папки проекта joda-time-2.0.jar и запускаем с ним. Результат — 458 мс. Исследование №4: 1. Качаем бету Java 8 от IBM 2. Дописываем бенчмарк, который делает LocalDateTime.ofInstant(Instant.ofEpochMilli(millis), id).getYear() 3. Запускаем — 960 мс. Т.е. уже лучше Calendar, но всё ещё хуже joda-time-2.0. Выводы: Новое — не значит лучшее. Хочешь реально быстрого извлечения времени — создавай один объект MutableDateTime из joda-time и будет тебе счастье. Для истории, код бенчмарка: ```java import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.temporal.ChronoField; import java.util.Calendar; import org.joda.time.DateTimeFieldType; import org.joda.time.DateTime; import org.joda.time.MutableDateTime; interface MillisToYear { int year(long millis); } class CalendarMillisToYear implements MillisToYear { private final Calendar cal = Calendar.getInstance(); @Override public int year(final long millis) { cal.setTimeInMillis(millis); return cal.get(Calendar.YEAR); } } class JodaMillisToYear implements MillisToYear { private final DateTimeFieldType year = DateTimeFieldType.year(); @Override public int year(final long millis) { return new DateTime(millis).get(year); } } class MutableJodaMillisToYear implements MillisToYear { private final DateTimeFieldType year = DateTimeFieldType.year(); private final MutableDateTime date = new MutableDateTime(); @Override public int year(final long millis) { date.setMillis(millis); return date.get(year); } } class Java8MillisToYear implements MillisToYear { private final ZoneId id = ZoneId.of("Europe/Moscow"); @Override public int year(final long millis) { return LocalDateTime.ofInstant(Instant.ofEpochMilli(millis), id) .getYear(); } } public class Main { public static void main(final String... args) { MillisToYear mty; switch (Integer.parseInt(args[0])) { case 0: mty = new CalendarMillisToYear(); break; case 1: mty = new JodaMillisToYear(); break; case 2: mty = new MutableJodaMillisToYear(); break; case 3: mty = new Java8MillisToYear(); break; default: throw new RuntimeException(); } long now = System.currentTimeMillis() / 86400000L * 86400000L; for (long i = 0; i < 1000000; ++i) { mty.year(now + i); } long start = System.currentTimeMillis(); long chksum = 0L; for (long i = 0L; i < 10000000000L; i += 1000L) { chksum += mty.year(now + i); } long total = (System.currentTimeMillis() - start); System.out.println("Total time: " + total); System.out.println("Checksum: " + chksum); } } ```
#N6DAAM (7) / @hirthwork / 3732 дня назад
Парни, у меня тут какой-то феерический майндфак. Есть такая читалка, CoolReader называется. В ней есть закладки и даже экспорт оных в файл. В коде написано, что файл в UTF-8, но при этом в него пишется BOM для UTF-16 (0xfeff то есть, вместо положенного 0xefbbbf): http://sourceforge.net/p/crengine/crengine/ci/cr3-3.1.2-33/tree/android/src/org/coolreader/crengine/BookInfo.java#l240 (ссылка на код той версии, что собран и работает у меня на Nook). По факту в файле BOM правильный, двухбайтовый. WTF?
#QM4LZU (5) / @minoru / 3733 дня назад
хётворк тупил в монитор, нервно кусал губы и ждал её — восьмую jvm от IBM
#HOA86U (2) / @hirthwork / 3740 дней назад
Год назад меня доебал ant и я написал свою билд систему на базе мэйка. Сейчас меня уже доебала моя билд-система и я хочу написать новую билд-систему на джаве с бутстрапом на make. Я знаю что я хуй и противен себе. Такие дела
#EL3YH4 (9) / @hirthwork / 3753 дня назад

У джавистов какие-то специальные файловые менеджеры, которые при переходе в директорию сразу же переходят в единственную поддиректорию, пока не наткнутся на директорию с более чем одним файлом?

#V6XMXU (16+4) / @minoru / 3783 дня назад

StringBuilder.toString() и String.<init>(StringBuilder) в IBM JRE делают разные вещи. Очень разные. Во втором случае копирования массива char'ов не происходит. Правда, узнать это можно только почитав код.

#XT16CT (2) / @hirthwork / 3806 дней назад

В чём же тогда преимущество final-класса?
Ответ ясен - в скорости. Если компилятор должен предположить, что класс не может порождать другие классы, он может генерировать лучше и быстрее исполняяемый байт-код. Другой причиной является защищенность. Вооружившись определенными навыками, хакеры могли бы пытаться напасть на систему безопасности Java через наследование. Поэтому многие важные предопределенные классы (например, класс String) неизменяемы.

#W5B5DS (3+2) / @mugiseyebrows / 3867 дней назад

Collections.unmodifiableCollection(...) не проксирует вызовы hashCode() и equals(Object). Хочешь класть в хэшмап — заворачивай в .unmodifiableList или .unmodifiableSet

#9298R1 (0) / @hirthwork / 3879 дней назад

tfw просматриваешь байткод, чтобы найти lookupswitch в performance-critical функции и заменить его вручную на лукап в таблице. mfw функция начинает работать двое быстрее.

#UOK1XN (15) / @hirthwork / 3890 дней назад

tfw самописный json-парсер оказывается в три раза быстрее того что используется сейчас в продакшене

#959XWH (15) / @hirthwork / 3891 день назад
--
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.