Вопросы по теме 'jvm-bytecode'

Подписи байт-кода Java
Как часть компилятора для языка программирования, над которым я работаю, я наткнулся на общие подписи в байт-коде, который я пытаюсь разобрать и преобразовать в AST. Алгоритм синтаксического анализа в основном работает, но, кажется, есть особый...
1346 просмотров

Почему нет инструкции ICMP?
Как некоторые из вас, возможно, знают, у нас есть множество кодов операций для сравнения различных типов примитивных значений: LCMP FCMPL FCMPG DCMPL DCMPG IFEQ IFNE IFLT IFGE IFGT IFLE IF_ICMPEQ IF_ICMPNE IF_ICMPLT IF_ICMPGE IF_ICMPGT IF_ICMPLE...
700 просмотров
schedule 16.05.2023

Возможна оптимизация последовательности байт-кода
Я генерирую последовательность байт-кода после встроенного вызова нескольких методов. В начале встроенного метода я сначала сопоставил существующие индексы переменных с новыми номерами локальных переменных на случай любого исключения во встроенном...
120 просмотров

Что означает инструментарий AOT?
Я знаю, что такое инструментарий байт-кода. Это просто изменение байт-кодов файлов .class во время выполнения, которое, по-видимому, доступно, начиная с JDK 1.5. Однако говорят, что это происходит во время загрузки класса, а не во время выполнения....
608 просмотров

Разделение InsnList на базовые блоки
В ASM Tree API у меня есть InsnList, содержащий список инструкций в методе. Я хочу разделить это на базовые блоки: последовательность инструкций, в которой каждая инструкция, кроме последней, имеет ровно одного преемника, и такая, что никакая...
342 просмотров

Есть ли умный способ определить длину инструкций байт-кода Java?
Я создаю инструмент статического анализа для Java, и есть некоторая информация о программах, которые я анализирую, которую будет легче получить, если я смогу получить ее из байт-кода в .class файлах. Меня не волнуют все до единой инструкции ,...
945 просмотров
schedule 07.01.2023

null или пустая лямбда как значение по умолчанию
какое решение лучше? использовать обнуляемую лямбду или передать пустую лямбду в качестве параметра по умолчанию? kotlin как-то оптимизирует пустую лямбду? или создать новый экземпляр, который ничего не делает? class Test1(val action: () ->...
15277 просмотров
schedule 24.09.2022

Как получить файл класса (в формате спецификации) во время выполнения с помощью JVMTI?
Я работаю над исследовательским проектом, который включает в себя отзывы профилировщика Hotspot. В настоящее время я работаю над агентом JVMTI, который должен иметь следующие функции: слушайте любое скомпилированное событие загрузки. Извлеките...
559 просмотров

Получить MethodHandle из лямбда-объекта
Из java.lang.invoke.LambdaMetafactory : Рекомендуемый механизм для оценки лямбда-выражений состоит в том, чтобы преобразовать тело лямбда-выражения в метод, вызвать сайт вызова invokedynamic, список статических аргументов которого описывает...
650 просмотров
schedule 23.02.2023

ASM пропускает классы, если COMPUTE_FRAMES установлен в ClassWriter
Я работаю над агентом Java, который запускается вместе с плагином maven-surfire. Агент должен иметь возможность внедрять вызовы методов с помощью библиотеки ASM в загруженные методы в трех разных точках: 1) в начале каждого метода; 2) В конце...
464 просмотров

Использование invokedynamic — что происходит под капотом?
Задний план В настоящее время я пишу JVM на С# исключительно для академических целей (и, возможно, для создания смешанного приложения .NET и Java/Scala в будущем). Контекст Я пишу простой класс JAVA : public class test { public...
784 просмотров
schedule 21.03.2022

ASM: VisitLabel генерирует слишком много меток и инструкций nop
В документации ASM говорится, что метка представляет собой базовый блок и является узлом в графе управления. Поэтому я тестирую метод visitLabel на этом простом примере: public static void main(String[] args) { int x = 3, y = 4; if (x...
404 просмотров

Информация о типах для примитивных типов в полиморфных типах
Учитывая следующий объект: object Foo { val bar: List[Int] = List(1, 2, 3) } Когда мы компилируем этот файл в байт-код JVM, из-за стирания типов и из-за того, что Java не поддерживает примитивные типы в качестве параметров для универсальных...
68 просмотров
schedule 12.09.2022

Преимущества производительности перекомпиляции старого проекта Java с последней версией Java
Имеет ли смысл перекомпилировать проект с новой (java 11) целевой версией с точки зрения производительности, если он будет запускаться на java 11, а исходный код останется прежним (java 8)? <plugin>...
221 просмотров
schedule 28.04.2023

Извлечение тега типа с помощью Witness
Я провожу некоторые эксперименты с Witness и теперь пытаюсь понять, как это работает. Рассмотрим следующий пример: import shapeless.syntax.singleton._ import shapeless.labelled.FieldType import shapeless.Witness def main(args : Array[String]):...
76 просмотров

ASM не сообщает о постоянных инструкциях
Я пытаюсь использовать библиотеку ASM для чтения байтового кода и перевода его в другой формат. Начнем с простого тестового класса, содержащего этот метод: public static double square(double a) { return a * a; } Который компилируется в...
41 просмотров

Реализация метода ByteBuddy, который создает новый объект
Я использую Byte Buddy 1.9.0 в качестве генератора кода для языка программирования на основе Xtext, и я изо всех сил пытаюсь создать байт-код для метода, который создает экземпляр "анонимного" класса. Для всех намерений и целей я пытаюсь, чтобы Byte...
373 просмотров
schedule 27.09.2022

Компиляция/разборка Java без создания постоянного пула?
У меня возникли проблемы с пониманием использования некоторых инструкций байт-кода Java, частично из-за отсутствия примеров. Вместо этого я использую javac или Jasmin для компиляции обычного Java-кода, а затем использую javap -c для проверки...
73 просмотров
schedule 13.04.2023

Как игнорировать инструментальные геттеры/сеттеры при использовании ASM?
Я использую библиотеку ASM для инструментовки некоторых классов. Я создаю свой собственный экземпляр MethodVisitor и переопределяю некоторые из его методов, например. visitCode() , который вызывается, когда MethodVisitor находится в начале...
170 просмотров