
минутка рекламы: http://www.twmacinta.com/myjava/fast_md5.php — охуенная реализация, которая работает в два раза быстрее родной реализации MD5 в джаве // завтра катну в продакшен и посмотрю что распидорасит
минутка рекламы: http://www.twmacinta.com/myjava/fast_md5.php — охуенная реализация, которая работает в два раза быстрее родной реализации MD5 в джаве // завтра катну в продакшен и посмотрю что распидорасит
Map<String, Integer> m = ...;
Number n = m.getOrDefault(key, new Double(0.5d));
Не компилится. А всё потому, что авторам лень было сделать эту функцию дженериком. Говно, кароч
// Плюсопетухи приглашаются покукарекать о том что это ненужно, потому что у них такого нет
Не используйте FilterOutputStream
— это говно: http://grepcode.com/file/re...utputStream.java#120
знатно объебался со своим повсеместным использованием try-with-resources
уж если возможна в логике ситуация, когда close вызывать не нужно, то и нехуй try-with-resources тогда в этом месте использовать
Как же я, блядь, ненавижу ёбаный type erasure. Напрочь убивает все позывы к метапрограммированию.
Я пока точно не уверен, но скорее всего через полчаса вы получите очередную порцию нытья про то что type erasure в джаве — ёбаное говно.
Почему есть static String Objects.toString(Object)
, но нет static T Objects.clone(T)
? Сука, я как плебей должен ручками на null проверять?
дваждымандопроёбище блядь
оказывается, что java не перечитывает /etc/resolv.conf
, если он изменился. нужно изъёбываться и вызывать через JNI res_init(3)
, чтобы изменения подхватились
подробности тута и по ссылкам: https://groups.google.com/f...sympathy/Z8t06cqaWQE
запустил простенький бенчмарк с -server
. работа с простыми объектами стала в два раза медленнее, а вот работа с атомиками чуть быстрее
Шёл 2017 год, но чтобы получить количество секунд с начала эпохи всё ещё нужно ебаться одним из способов на выбор:
a) System.currentTimeMillis() / 1000
— блядь, всю жизнь мечтал магические константы по коду расставлять
б) Instant.now().getEpochSecond()
— 2 (две) аллокации объектов, 2 (два) целочисленных деления и ещё горстка арифметических операций на сдачу
в) TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())
— Больше текста, больше текста! // пожалуй на этом варианте и остановлюсь. Главное — не заглядывать больше в реализацию TimeUnit
джва года ждал
https://docs.oracle.com/jav...l.function.Supplier-
Неожиданно ленивая загрузка классов в Java иногда помогает найти race condition даже без нагрузочного тестирования сервиса. Вчерашний пример. Было:
void consume(final PipedInputStream in) throws IOException {
while (true) {
int read = in.read(buf);
....
}
}
Стало:
void consume(final PipedInputStream in) throws IOException {
try (InputStream in = new ThirdPartyWrapper(in)) {
....
}
}
Поскольку класс ThirdPartyWrapper использован был впервые и это вообще был первый вызов функции consume, то JVM запустила ClassLoader, который загрузил класс из jar-ника, который сам по себе довольно тяжёлый, да ещё и на медленном HDD находится.
Короче говоря, от вызова функции до чтения первого байта при первом запуске стало проходить несколько миллисекунд. За это время другой тред стал успевать испортить данные в стриме и сделать его нечитабельным. Вот так я обнаружил race condition, который более-менее стабильно воспроизводится. А с этими вашими плюсцами мне б проблему пришлось в продакшене ловить
socket.getOutputStream().flush()
не делает нихуя
всё потому что SocketOutputStream
является наследником FileOutputStream
, который во flush()
не делает нихуя
всё потому что они работают напрямую с файловым дескриптором и вызывают write(2)
, который не буферизует нихуя
на самом деле в сокете буферизует, но только если включен Nagle's algorithm a.k.a. TCP delay, который включен по умолчанию и выключается при помощи TCP_NODELAY
Вот и пришло то время, когда ленивая загрузка классов выстреливает тебе в ногу. В самый неподходящий момент не самый сложных конструктор класса отрабатывает больше чем за секунду, чем валит тесты.
Есть две опенсорсных либы. На одной FFI точеный, на другой stderr дроченый. Какую грязью изгадишь, какую в продакшен покатишь?
Ну ёб твою мать http://grepcode.com/file/re...a/nio/Bits.java/#649
Если чо, функция Bits.reserveMemory(...)
вызывается при каждом создании DirectByteBuffer'а, да и вообще любого direct buffer'а