Кто-нибудь знает, есть ли способ вернуть два значения из Java с (близкими) нулевыми накладными расходами? Я ищу только два значения - у меня есть пара вариантов использования: от обработки массива байтов (и мне нужно возвращаемое значение и следующая начальная позиция) до попытки вернуть значение с кодом ошибки, чтобы сделать какое-то уродство с фиксированным- точечные расчеты и нужна целая и дробная часть.
Я не ниже некоторых действительно уродливых хаков. Функция небольшая, и Hotspot с радостью встраивает ее. Так что теперь мне просто нужно, чтобы Hotspot в основном исключал любое создание объекта или сдвиг битов.
Если я ограничу возвращаемые значения целыми числами, я попытался упаковать их в длинный, но даже после встраивания Hotspot не может понять, что все битовые сдвиги и маски на самом деле ничего не делают, и он с радостью упаковывает и распаковывает ints в одни и те же значения (очевидно, здесь нужна помощь оптимизатору глазка Hotspot). Но по крайней мере я не создаю объект.
Мой более сложный случай, когда один из элементов, которые мне нужно вернуть, является ссылкой, а другой — длинной или другой ссылкой (для случая int я думаю, что могу сжать ООП и использовать битовую упаковку, описанную выше).
Кто-нибудь пытался заставить Hotspot генерировать для этого код без мусора? В худшем случае сейчас мне нужно носить с собой объект и передавать его, но я бы хотел, чтобы он был автономным. Локальные потоки дороги (поиск хэшей), и они должны быть реентерабельными.