Как стать автором
Обновить

Ускорение JRuby в три раза после установки JDK 7u2

Время на прочтение 1 мин
Количество просмотров 1.2K
Ruby *
Команда разработчиков JRuby настоятельно рекомендует всем установить последнюю версию OpenJDK 7u2 (OpenJDK 7 update 2), которая значительно доработана по сравнению с июльским релизом JDK 7 GA (General Availability). Среди прочего, сделана важная оптимизация в подсистеме invokedynamic. Поскольку JRuby 1.7 активно использует эту подсистему, то разработчики специально придерживали выпуск 1.7, дожидаясь этого апдейта. Собственно, официальный релиз 1.7 не произошёл до сих пор, но предварительную сборку для тестирования можно скачать здесь.

При использовании JRuby 1.6.x после апгрейда с Java 6 на Java 7 вы увидите прирост скорости JRuby-приложений примерно на 10-30%, а в случае с JRuby 1.7 — примерно в три раза!

Разработчики просят тех, кто не заметил никакой разницы в производительности, зарегистрировать сообщение в баг-трекере. Очевидно, это какой-то баг, который постараются исправить к официальному релизу JRuby 1.7.

Это ещё не всё. Для будущего OpenJDK 7u4 запланирован новый оптимизатор invokedynamic, и ребята из OpenJDK говорят о возможности ещё большего увеличения производительности.
Всего голосов 28: ↑26 и ↓2 +24
Комментарии 7

Сравниваем производительность reflection в JDK8 и JDK7

Время на прочтение 6 мин
Количество просмотров 23K
Высокая производительность *Разработка веб-сайтов *Java *
Привет, Хабр!

Недавно, путешествуя по коду своего рабочего проекта набрел на довольно высоконагруженный spring бин, который производил обращения к методам объектов (иногда и объектов сгенерированных на лету классов) вызывая геттеры и сеттеры объекта через reflection. В бине уже был реализован кэш геттеров, однако я задался вопросом — насколько быстр reflection и можно ли сделать быстрее.


Читать дальше →
Всего голосов 43: ↑36 и ↓7 +29
Комментарии 13

Владимир Иванов, Oracle — Глубокое погружение в invokedynamic

Время на прочтение 1 мин
Количество просмотров 10K
Блог компании JUG Ru Group Java *
Этот анонс посвящается тем, кто ныл всю зиму, что на JUG.ru давно не было хардкора.

В среду, 11 марта, в петербургском офисе компании Oracle состоится встреча JUG.ru c Владимиром Ивановым, инженером команды HotSpot JVM.

Тема встречи — инструкция invokedynamic и ее реализация в JDK/JVM.



В Java 7 на уровне байткода появилась новая инструкция — invokedynamic. Инструкция с программируемым связыванием позволила динамическим языкам на Java платформе достичь новых высот производительности. JRuby активно использует invokedynamic начиная с Java 7, а в Java 8 появилась среда исполнения для JavaScript, полностью основанная на новом API.
Подробности
Всего голосов 20: ↑18 и ↓2 +16
Комментарии 14

Что там с JEP-303 или изобретаем invokedynamic

Время на прочтение 8 мин
Количество просмотров 9.7K
Программирование *Java *

Блогеры и авторы, пытающиеся быть на передовой, уже немало писали про проект Amber в Java 10. В этих статьях обязательно упоминается вывод типов локальных переменных, улучшения enum и лямбд, иногда пишут про pattern matching и data-классы. Но при этом незаслуженно обходится стороной JEP 303: Intrinsics for the LDC and INVOKEDYNAMIC Instructions. Возможно, потому что мало кто понимает, к чему это вообще. Хотя любопытно, что именно об этой фиче ребята из NIX_Solutions фантазировали на Хабре год назад.


Широко известно, что в виртуальной машине Java, начиная с версии 7, есть интересная инструкция invokedynamic (она же indy). Про неё многие слышали, однако мало кто знает, что она делает на самом деле. Кто-то знает, что она используется при компиляции лямбда-выражений и ссылок на методы в Java 8. Некоторые слышали, что через неё реализована конкатенация строк в Java 9. Но хотя это полезные применения indy, изначальная цель всё же немного другая: делать динамический вызов, при котором вы можете вызывать разный код в одном и том же месте. Эта возможность не используется ни в лямбдах, ни в конкатенации строк: там поведение всегда генерируется при первом вызове и остаётся постоянным до конца работы программы (всегда используется ConstantCallSite). Давайте посмотрим, что можно сделать ещё.

Читать дальше →
Всего голосов 31: ↑31 и ↓0 +31
Комментарии 15

Максимальное количество значений в enum Часть II

Время на прочтение 21 мин
Количество просмотров 3.3K
Ненормальное программирование *Java *
Recovery mode
Часть первая, теоретическая | Часть вторая, практическая



Продолжаем поиск максимального возможного количества значений в перечислении.
На этот раз сосредоточимся на практической стороне вопроса и посмотрим, как на наши достижения будут реагировать IDE, компилятор и JVM.
Читать дальше →
Всего голосов 11: ↑11 и ↓0 +11
Комментарии 7

Как сделать ссылки на методы дружелюбными для отладки

Время на прочтение 5 мин
Количество просмотров 6.4K
Программирование *Java *

В Java 8 появилось два вида функциональных выражений — лямбда-выражения вида s -> System.out.println(s) и ссылки на методы вида System.out::println. Поначалу ссылки на методы вызывали больше энтузиазма: они часто компактнее, вам не требуется придумывать имя для переменной, а ещё старожилы говорят, что они несколько оптимальнее, чем лямбда-выражения. Однако со временем энтузиазм ослаб. Одна из проблем со ссылками на методы — затруднённая отладка ошибок.

Читать дальше →
Всего голосов 21: ↑21 и ↓0 +21
Комментарии 3

How to make debug-friendly method references

Время на прочтение 5 мин
Количество просмотров 3.9K
Программирование *Java *
Перевод

Java 8 introduced two kinds of functional expressions: lambda expressions like s -> System.out.println(s) and method references like System.out::println. At first, developers were more enthusiastic about method references: they are often more compact, you don't need to think up the parameter name, and, as urban legends say, method references are somewhat more optimal than lambda expressions. Over time, however, the enthusiasm waned. One of the problems with method references is the difficulty in debugging.

Read more →
Рейтинг 0
Комментарии 1

Сюрпризы конкатенации

Время на прочтение 5 мин
Количество просмотров 6.1K
Java *
✏️ Технотекст 2021

Вопрос в стиле головоломок с offline-конференций: Что выведет этот код при запуске?


import java.util.concurrent.atomic.AtomicInteger;

public class Disturbed {

    public static void main(String... args) {
        AtomicInteger counter = new AtomicInteger(1);
        System.out.println(
            "First two positive numbers: " +
            counter + 
            ", " +
            counter.incrementAndGet()
        );
    }

}

Помедитируйте немного над кодом и приходите за ответом под кат.

Читать дальше →
Всего голосов 26: ↑26 и ↓0 +26
Комментарии 6