Apa itu Java compiler?

Java compiler adalah program yang mengambil file teks dari hasil kerja developer dan mengkompilasi file tersebut menjadi file Java yang bersifat platform-independent. Beberapa Java compiler yang dikenal antara lain Java Programming Language Compiler (javac), GNU Compiler for Java (GCJ), Eclipse Compiler for Java (ECJ), dan Jikes.

Biasanya, programmer menulis pernyataan dalam bahasa pemrograman secara baris demi baris menggunakan code editor atau integrated development environment (IDE). File yang dihasilkan berisi source statements. Selanjutnya, programmer menjalankan compiler untuk bahasa yang sesuai, dengan menentukan nama file yang berisi source statements tadi.

Hal ini juga berlaku untuk Java dan para programmer Java. Java compiler menerima source code Java level tinggi, lalu mengubahnya menjadi bytecode yang bisa dimengerti oleh Java Virtual Machine (JVM) guna menghasilkan output sesuai yang diinginkan.

Saat dijalankan, compiler akan mem-parsing (menganalisis) semua pernyataan dalam bahasa pemrograman secara sintaksis. Proses ini dilakukan dalam satu atau beberapa tahap berturut-turut (disebut juga “passes”) untuk membangun kode output akhir, sekaligus memastikan bahwa setiap pernyataan yang saling merujuk sudah benar pada kode akhirnya.

Secara umum, Java compiler dijalankan dengan menunjuk ke kode program yang ditulis dalam file teks untuk menghasilkan file class yang nantinya digunakan oleh JVM di berbagai platform. Misalnya, Jikes adalah compiler open source yang bekerja seperti ini, dan begitu juga compiler utama di Java Development Kit (JDK) yang disebut javac. Compiler ini ditulis dalam bahasa Java dan digunakan untuk membaca definisi class serta interface dalam Java, lalu mengubahnya menjadi file bytecode.

Untuk menjalankan Java compiler, programmer harus menjalankan perintah Javac.exe melalui command prompt. Compiler ini, seperti Java, bersifat platform-independent, artinya bisa mengkompilasi dan menjalankan kode di berbagai sistem operasi (OS). Namun, compiler ini bersifat language-specific, jadi tidak bisa digunakan untuk mengkompilasi kode dari bahasa lain seperti Python atau C++.

Apa tujuan dari Java compiler?

Tujuan utama dari Java compiler (atau compiler pada bahasa pemrograman manapun) adalah untuk menerjemahkan source code Java level tinggi menjadi file machine code yang terdiri dari 0 dan 1 agar bisa dieksekusi oleh komputer.

Proses kompilasi ini penting karena komputer tidak bisa memahami bahasa tingkat tinggi seperti Java secara langsung. Dengan mengubahnya ke bahasa mesin, Java compiler memastikan bahwa program bisa dijalankan dan memberikan hasil/output sesuai harapan.

Compiler juga berfungsi sebagai alat pendeteksi error pada Java. Ketika dijalankan, compiler akan mengecek apakah ada error sintaks dan akan menampilkan daftar error-nya. Kalau masih ada error, maka compiler tidak akan menghasilkan object code. Bahkan, dalam beberapa kasus, compiler juga bisa menambahkan kode tambahan ke program jika memang dibutuhkan.

Java compiler dan bytecode

Setelah mengkompilasi source code (file .java), compiler akan menghasilkan kode objek intermediate yang disebut bytecode, dalam bentuk file .class. Bytecode ini bukan machine code, tapi merupakan kode biner yang bisa dimengerti dan dijalankan oleh JVM pada sistem operasi tempat aplikasi dijalankan. Karena bytecode terdiri dari angka 0 dan 1, maka bytecode ini tidak bisa dibaca langsung oleh manusia.

Untuk menghasilkan bytecode, compiler mungkin membutuhkan memori tambahan saat proses kompilasi berlangsung.

Cara kerja Java compiler

Programmer menulis source code Java lalu menjalankan compiler seperti javac. Compiler akan mengecek apakah file source tersedia dan kemudian menghasilkan bytecode Java (file .class). Kalau file source tidak ditemukan, maka akan muncul pesan error. Namun jika file source tersedia dan bytecode berhasil dibuat (terlepas dari sistem operasi dan arsitektur prosesor), maka file bytecode ini akan otomatis disimpan ke dalam disk. JVM akan menginterpretasikan dan mengeksekusi file class tersebut saat runtime di OS yang digunakan.

Kalau compiler menemukan error, maka akan muncul daftar pesan error. Programmer harus memperbaiki error tersebut dan menjalankan compiler lagi untuk me-recompile programnya. Langkah ini penting untuk menghasilkan object code yang bisa dibaca oleh mesin. Kalau tidak ada error, compiler akan langsung menghasilkan object code yang diperlukan.

Opsi pada Java compiler

Compiler javac menyediakan banyak opsi standar untuk programmer. Beberapa di antaranya adalah:

  • -version. Menampilkan informasi tentang compiler.
  • -help. Menampilkan ringkasan opsi standar yang tersedia.
  • -nowarn. Menonaktifkan peringatan (warning).
  • -g. Menghasilkan informasi untuk keperluan debugging (seperti nomor baris, informasi file source, variabel lokal).
  • -verbose. Menampilkan output lebih lengkap, termasuk info tentang file source yang dikompilasi dan class yang dimuat.
  • -d directory. Memungkinkan programmer menentukan direktori tujuan (yang sudah ada sebelumnya) untuk menyimpan file class hasil kompilasi.
  • -deprecation. Mengidentifikasi API yang sudah tidak direkomendasikan atau dihentikan penggunaannya.

Semua opsi di atas bersifat case-sensitive, jadi penulisan huruf besar-kecilnya harus tepat.

Apa itu just-in-time compiler?

Just-in-time (JIT) compiler adalah fitur tambahan dalam Java Virtual Machine (JVM). Penggunaannya opsional dan digunakan untuk meng-compile kode yang sudah platform-independent. JIT compiler akan menerjemahkan kode ini menjadi kode mesin untuk berbagai jenis perangkat keras agar bisa berjalan secara optimal di berbagai arsitektur.

Setelah kode berhasil di-(re)compile oleh JIT compiler, biasanya program akan berjalan lebih cepat dibandingkan dengan Java code yang dieksekusi satu instruksi demi satu secara langsung oleh interpreter.

Java compiler vs Java interpreter

Dalam pemrograman Java, kita menggunakan baik Java compiler maupun interpreter. Keduanya penting dalam bahasa pemrograman tingkat tinggi seperti Java karena berperan dalam proses konversi kode dari level tinggi ke level rendah (machine code). Namun, cara kerjanya berbeda.

Compiler akan membaca seluruh source code secara langsung dalam satu kali proses, lalu menggabungkan semua file kode menjadi satu program eksekusi (.exe). Compiler kemudian akan menjalankan seluruh file, sekaligus mengecek apakah ada error sintaks atau error lainnya. Kalau ada error, semuanya akan ditampilkan sekaligus dalam bentuk pesan error dan warning.

Setelah error diperbaiki, compiler bisa dijalankan ulang untuk memastikan bahwa semua error sudah teratasi dan kualitas kode sudah oke. Jika tidak ada lagi error, maka source code akan diterjemahkan menjadi machine code dan menghasilkan output yang sesuai.

Interpreter, di sisi lain, mengeksekusi pernyataan dalam kode pemrograman baris demi baris. Kalau ada error, interpreter akan langsung menghentikan eksekusi dan menampilkan error tersebut. Program hanya akan lanjut kalau error sudah diperbaiki. Singkatnya, interpreter menampilkan satu error pada satu waktu dan menunggu sampai diperbaiki sebelum lanjut, sementara compiler akan menampilkan semua error sekaligus dan lanjutkan eksekusi sampai akhir file source code.

Perbedaan lainnya, compiler biasanya butuh waktu lebih lama untuk menganalisis source code. Proses debugging juga lebih lambat. Dan program hanya bisa dijalankan setelah semua error diperbaiki dan kode selesai dikompilasi sepenuhnya. Sementara interpreter lebih cepat dalam menganalisis kode, proses debugging juga lebih cepat, dan program bisa langsung dijalankan baris per baris.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *