JavaRush /Java Blog /Random-ID /Kode mesin dan kode byte: bahasa apa yang digunakan progr...

Kode mesin dan kode byte: bahasa apa yang digunakan program Anda?

Dipublikasikan di grup Random-ID
Mereka yang baru mulai mengenal Java sering kali bingung dengan konsep kode mesin dan kode byte . Apakah mereka? Apa perbedaannya? Dalam catatan singkat, kami akan mencoba menjelaskan fitur-fiturnya sesederhana dan sejelas mungkin untuk menutup masalah ini untuk selamanya.
Kode mesin dan kode byte: bahasa apa yang digunakan program Anda?  - 1

Kode mesin

Prosesor pada dasarnya adalah kalkulator yang sangat kompleks dan canggih. Ia mempunyai banyak lokasi memori (disebut register) di mana berbagai operasi matematika dan byte dilakukan. Kode mesin justru merupakan deskripsi urutan operasi dan kumpulan data yang terlibat. Faktanya, ini adalah satu-satunya bahasa yang dipahami oleh prosesor komputer Anda.

Ketidakcocokan bawaan

Selain itu, tidak semua prosesor “berbicara” dalam bahasa yang sama. Ada perbedaan tidak hanya antara arsitektur CISC dan RISC , tetapi juga di dalam “kamp” ini.

CISC (Complex Instruksi Set Computing) adalah konsep desain prosesor yang ditandai dengan serangkaian properti berikut:

  • banyak perintah, panjangnya berbeda;
  • banyak mode pengalamatan;
  • pengkodean instruksi yang kompleks.
RISC (Reduksi Set Instruksi Komputasi) - prosesor dengan set instruksi yang dikurangi. Perintahnya memiliki format yang sama, pendek, dengan pengkodean sederhana.
Prosesor generasi baru memperkenalkan serangkaian instruksi tambahan yang tidak diketahui oleh model generasi lama. Oleh karena itu, program yang dikompilasi untuk satu arsitektur (atau satu generasi prosesor) tidak dapat dijalankan pada perangkat keras lain. Semua ini memaksa kami untuk mengkompilasi ulang program untuk memastikan program tersebut berfungsi di komputer lain. Namun, Anda harus mengkompilasi ulang bukan hanya karena prosesornya, tetapi juga karena perbedaan interaksi antara program dan sistem operasi. Karena merekalah tidak mungkin menjalankan program “Windows” di Linux, dan program “Linux” di Windows.

kode byte

Bytecode dalam banyak hal mirip dengan kode mesin, hanya saja ia menggunakan serangkaian instruksi bukan dari prosesor nyata, tetapi dari prosesor virtual. Selain itu, ini mungkin mencakup bagian yang berfokus pada penggunaan kompiler JIT , yang mengoptimalkan pelaksanaan perintah untuk prosesor sebenarnya tempat program dijalankan.
Kompilasi JIT (Kompilasi just-in-time, kompilasi on-the-fly) atau kompilasi dinamis (penerjemahan dinamis) adalah teknologi untuk meningkatkan kinerja sistem perangkat lunak yang menggunakan bytecode dengan cara mengkompilasi bytecode tersebut ke dalam kode mesin atau ke format lain secara langsung sambil program sedang berjalan. “Resmi” di Java hingga versi 9 hanya ada kompiler JIT. Di Java 9, kompiler lain telah muncul, dan dikompilasi sebelumnya (AoT). Fitur ini memungkinkan kelas Java dikompilasi menjadi kode asli sebelum dijalankan di mesin virtual. Fitur ini dirancang untuk meningkatkan waktu startup untuk aplikasi kecil dan besar, dengan dampak terbatas pada kinerja puncak.
Untuk prosesor CISC , beberapa instruksi dapat digabungkan menjadi struktur yang lebih kompleks yang didukung oleh prosesor, dan untuk RISC , sebaliknya, instruksi tersebut dapat dipecah menjadi urutan instruksi yang lebih sederhana.

Juga OS virtual

Namun, kode byte tidak hanya berisi instruksi prosesor. Ini juga berisi logika untuk berinteraksi dengan sistem operasi virtual, yang membuat perilaku aplikasi tidak tergantung pada sistem operasi yang digunakan pada komputer. Hal ini terlihat jelas di JVM , di mana pekerjaan dengan panggilan sistem dan GUI seringkali tidak bergantung pada OS tempat program dijalankan. Secara umum, JVM mengemulasi peluncuran proses program, tidak seperti solusi seperti Virtual Box , yang hanya membuat sistem/perangkat keras virtual.

Apakah JVM satu-satunya yang seperti ini?

Tentu saja tidak. CLI DotNet yang sama juga merupakan mesin virtual, yang paling sering digunakan pada komputer yang menjalankan Windows dengan prosesor yang kompatibel dengan x86. Namun, ada implementasinya untuk sistem lain: aplikasinya harus berjalan pada Windows RT yang berjalan pada prosesor yang kompatibel dengan ARM (RISC) , atau Anda dapat menjalankannya di Linux/OSX di lingkungan Mono , yang merupakan pihak ketiga (dan karenanya tidak sepenuhnya kompatibel) implementasi DotNet untuk platform ini. Jadi platform ini, seperti JVM , berjalan pada prosesor berbeda dan OS berbeda. Masih banyak lagi solusi serupa (lama dan baru): LLVM , Flash SWF , dan lainnya. Beberapa bahasa pemrograman memiliki mesin virtualnya sendiri. Misalnya, CPython mengkompilasi sumber PY ke dalam file PYC - kode byte terkompilasi yang siap dijalankan di PVM . Atau ada contoh yang lebih lama - Lisp dapat dikompilasi menjadi file FASL (Fast Load). Faktanya, mereka berisi pohon AST yang dibuat oleh generator dari kode sumber. File-file ini dapat dibaca dan dieksekusi oleh penerjemah Lisp di berbagai platform, atau digunakan untuk menghasilkan kode mesin untuk arsitektur perangkat keras yang saat ini digunakan.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION