AVAP adalah alat yang dilengkapi dengan JDK. Anda dapat menemukannya di bawah /bin di direktori instalasi JDK. Anda dapat mendekompilasi kode, atau melihat bytecode yang dihasilkan oleh kompiler Java, menganalisis proses eksekusi kode, dan memahami pekerjaan di dalam JVM.
Berikut ini mencantumkan opsi dan deskripsi fungsi yang umum digunakan dari perintah JAVAP. Silakan Google lebih banyak fungsi untuk lebih banyak fungsi. Penulis tidak akan menguraikannya.
Ringkasan Penggunaan
-membantu
-L Tabel Baris dan Variabel Output
-Public hanya mengeluarkan metode dan domain publik
-Kelas yang dilindungi hanya menghasilkan kelas dan anggota publik dan yang dilindungi
-Kumpuk Paket Output Hanya, Kelas dan Anggota Publik dan Dilindungi, yang merupakan default
-p -output -private semua kelas dan anggota
Tanda Tangan Jenis Internal Output
-C Output kode yang didekomposisi, misalnya, dalam setiap metode di kelas, instruksi yang berisi java bytecode,
-Verbose Ukuran tumpukan output, jumlah parameter metode
Konstanta akhir output statis output
Studi kasus
Perintah JAVAP menguraikan file kelas, dan menentukan apa yang akan di -output berdasarkan opsi. Jika opsi tidak digunakan, maka JAVAP akan mengeluarkan paket dalam file kelas, domain terlindungi dan publik di kelas, dan semua metode di kelas. JAVAP akan mengeluarkannya pada output standar. Mari kita lihat contoh ini dan First Compile (Javac) kelas berikut.
Paket com.thundersoft.metadata.test.kafka; impor org.apache.kafka.clients.consumer.consumerrecord; impor org.apache.kafka.clients.producer.kafkaproducer; impor org.apache.kafka.clients.producer.producer; impor; org.apache.kafka.clients.producer.producer; org.apache.kafka.clients.producer.producerrecord; impor org.junit.test; import java.util.arrays; impor java.util.properties; Kelas publik kafkatest {@test public void testproducer () {Properties Properties = New Properties (); props.put ("bootstrap.server", "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", 33554432); 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"); Produser <String, String> produser = kafkaproducer baru <> (props); untuk (int i = 0; i <100; i ++) {produser.send (baru produserRecord <String, String> ("My-Topic", Integer.ToString (i), integer.tostring (i))); } produser.close (); } @Test public void testkafkaconsumer () {properties props = new properties (); props.put ("bootstrap.server", "192.168.204.30:9092"); props.put ("grup.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> konsumen = kafkaconsumer baru <> (props); konsumen.subscribe (arrays.aslist ("my-topic")); while (true) {consumeRecords <string, string> records = consumer.poll (100); untuk (ConsumerRecord <String, String> Record: Records) System.out.printf ("Offset = %s, key = %s, value = %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); }}Setelah mengetik javap kafkatest pada baris perintah, hasil output adalah sebagai berikut
kelas publik 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 []);}Dikombinasikan dengan Proses Eksekusi Kompiler Analisis Analisis
Di sini kami hanya fokus pada logika kode di dalam metode utama. Kode metode utama adalah sebagai berikut
public static void main (string [] args) {int a = 2; int b = 3; int sum = a*b; System.out.println (SUM); }Setelah mengetik javap -c kafkatest pada baris perintah, hasil output adalah sebagai berikut
public static void main (java.lang.string []); Kode: 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 // Field Java/Lang/System.out: ljava/io/printStream; 11: iload_3 12: Invokevirtual #54 // Metode java/io/printStream.println: (i) v 15: return
Seperti pada kode di atas, ICONST_2 dan ICONST_3 masing -masing mewakili Konstanta 2 dan 3. ILOAD_1 dan ILOAD_2 masing -masing mewakili definisi dua variabel biasa, ILOAD_1 dan ILOAD_2 masing -masing mewakili pemuatan dua variabel ke dalam tumpukan data, IMUL mewakili operasi perkalian dari dua variabel, dan hasilnya ditetapkan ke variabel ISTORE_3, dan akhirnya hasilnya adalah output dan program.
Selama proses menganalisis kode sederhana ini, poster menemukan situs web untuk perintah kompilasi JVM dan berbagi perintah JVM.
Meringkaskan
Penulis telah melakukan proses analisis kode sederhana di atasnya, berharap itu dapat membantu mereka yang ditakdirkan untuk menjadi. JAVAP dapat digunakan untuk mendekompilasi dan melihat bytecode yang dikompilasi oleh kompiler. Secara umum, tidak banyak yang digunakan, tetapi javap -c sering digunakan. Perintah ini digunakan untuk mendaftar instruksi JVM yang dijalankan oleh masing -masing metode. Ini adalah pilihan yang baik untuk memecahkan bug kesalahan logika yang rumit. Selain itu, melalui perbandingan bytecode dan kode sumber, kita dapat secara mendalam menganalisis prinsip-prinsip kompilasi dan proses eksekusi kode JAVA untuk menyelesaikan berbagai masalah tingkat prinsip Java.