AVAP - это инструмент, который поставляется с JDK. Вы можете найти его под /bin в каталоге установки JDK. Вы можете декомпилировать код или просмотреть байт -код, сгенерированный компилятором Java, проанализировать процесс выполнения кода и понять работу внутри JVM.
В следующем перечислены обычно используемые параметры и описания функций команды Javap. Пожалуйста, Google больше функций для большего количества функций. Автор не будет уточнять это.
Резюме использования
-помощь
-l Таблица выходных строк и переменных
-Попубличный только публичные методы и домены
-Корированный только выводит только общедоступные и защищенные классы и участники
-Покурс только выводит пакеты, публичные и защищенные классы и участники, что является по умолчанию
-p -private Выходы всех классов и участников
-s Выходная подпись внутреннего типа
-c выводит разлагаемый код, например, в каждом методе в классе, инструкция, содержащая Java Bytecode,
-Вербоза выходного стека, количество параметров метода
-Сотделение выводат статические окончательные константы
Тематическое исследование
Команда Javap разлагает файл класса, и она определяет, что вывозить на основе параметров. Если параметры не используются, то Javap выведет пакет в файле класса, защищенных и общественных доменах в классе и все методы в классе. Javap выведет их на стандартный выход. Давайте посмотрим на этот пример и сначала компилируйте (Javac) следующий класс.
пакет com.thundersoft.metadata.test.kafka; import org.apache.kafka.clients.consumer.consumerRecord; import org.apache.kafka.clients.producer.kafkaproducer; import org.apache.kafka.clients.producer.producer; org.apache.kafka.clients.producer.producerRecord; import org.junit.test; импорт java.util.arrays; import java.util.properties; открытый класс kafkatest {@test public void testproducer () {Properties Props = новые свойства ();); props.put ("bootstrap.servers", "192.168.204.30:9092"); props.put ("Acks", "All"); props.put ("retries", 0); props.put ("batch.size", 16384); props.put ("linger.ms", 1); props.put ("buffer.memory", 335544432); props.put ("key.serializer", "org.apache.kafka.common.serialization.stringserializer"); props.put ("value.serializer", "org.apache.kafka.common.serialization.stringserializer"); props.put ("value.serializer", "org.apache.kafka.common.serialization.stringserializer"); Производитель <String, String> Preduceer = new Kafkaproducer <> (ops); for (int i = 0; i <100; i ++) {produce.send (new ProducterRecord <String, String> ("my-topic", integer.toString (i), integer.toString (i))); } производитель.close (); } @Test public void testkafkaconsumer () {свойства props = new Properties (); props.put ("bootstrap.servers", "192.168.204.30:9092"); props.put ("group.id", "test"); props.put ("enable.auto.commit", "true"); props.put ("auto.commit.interval.ms", "1000"); props.put ("key.deserializer", "org.apache.kafka.common.serialization.stringdeserializer"); props.put ("value.deserializer", "org.apache.kafka.common.serialization.stringdeserializer"); Kafkaconsumer <string, string> consumer = new kafkaconsumer <> (ops); Consumer.SubScribe (Arrays.aslist ("My-Topic")); while (true) {consumerRecords <string, string> records = consumer.poll (100); for (ConsumerErcord <String, String> Record: Records) System.out.printf ("offset = %s, key = %s, значение = %s %n", record.topic (), record.key (), record.value ()); }} public static void main (string [] args) {int a = 2; int b = 3; int sum = a*b; System.out.println (sum); }}После набора Javap Kafkatest в командной строке результат вывода выглядит следующим образом
открытый класс com.thundersoft.metadata.test.kafka.kafkatest {public com.thundersoft.metadata.test.kafka.kafkatest (); public void testProducer (); public void testkafkaconsumer (); public static void main (java.lang.string []);}В сочетании с процессом выполнения компилятора кода
Здесь мы сосредоточены только на логике кода в основном методе. Основной код метода заключается в следующем
public static void main (string [] args) {int a = 2; int b = 3; int sum = a*b; System.out.println (sum); }После набора Javap -c Kafkatest в командной строке результат вывода выглядит следующим образом
Public Static Void Main (java.lang.string []); Код: 0: ICONST_2 1: ISTORE_1 2: ICONST_3 3: ISTORE_2 4: ILOAD_1 5: ILOAD_2 6: IMUL 7: ISTORE_3 8: GETSTATIC #47 // Полевой java/lang/system.out: ljava/io/printStream; 11: Iload_3 12: Invokevirtual #54 // Метод Java/io/printStream.println: (i) v 15: return
Как и в приведенном выше коде, ICONST_2 и ICONST_3 представляют константы 2 и 3 соответственно. Iload_1 и Iload_2 соответственно представляют определение двух обычных переменных, Iload_1 и Iload_2, соответственно, представляют загрузку двух переменных в стек данных, IMUL представляет операцию умножения двух переменных, и результат присваивается переменным ISTORE_3, и, наконец, результат выводится, и программа возвращает.
В процессе анализа этого простого кода, плакат обнаружил веб -сайт для команд компиляции JVM и поделился командами JVM.
Суммировать
Автор сделал простой процесс анализа кода, надеясь, что он сможет помочь тем, кому суждено быть. Javap может использоваться для декомпиляции и просмотра компилятора компилятора. Как правило, мало используется, но часто используется javap -c. Эта команда используется для перечисления инструкций JVM, выполненных каждым методом. Это хороший выбор, чтобы решить ошибку с хитрыми логическими ошибками. Кроме того, благодаря сравнению байт-кодового и исходного кода мы можем глубоко проанализировать принципы компиляции и процесс выполнения кода Java для решения различных задач на уровне принципа Java.