JavaRush /Blog Java /Random-MS /Kod mesin dan kod bait: bahasa apakah yang dituturkan ole...

Kod mesin dan kod bait: bahasa apakah yang dituturkan oleh program anda?

Diterbitkan dalam kumpulan
Mereka yang baru mula berkenalan dengan Java sering kali mengalami kekeliruan tentang konsep kod mesin dan kod bait . Apakah mereka? Apakah perbezaannya? Dalam nota ringkas, kami akan cuba menerangkan ciri-ciri mereka semudah dan sejelas mungkin untuk menutup isu ini sekali dan untuk semua.
Kod mesin dan kod bait: bahasa apakah yang dituturkan oleh program anda?  - 1

Kod mesin

Pemproses adalah, pada dasarnya, kalkulator yang sangat kompleks dan canggih. Ia mempunyai banyak lokasi memori (dipanggil daftar) pada dan antaranya pelbagai operasi matematik dan bait dilakukan. Kod mesin adalah tepat perihalan urutan operasi dan set data yang terlibat. Malah, ia adalah satu-satunya bahasa yang difahami oleh pemproses komputer anda.

Ketidakserasian kongenital

Pada masa yang sama, tidak semua pemproses "bercakap" dalam bahasa yang sama. Terdapat perbezaan bukan sahaja antara seni bina CISC dan RISC , tetapi juga dalam "kem" ini.

CISC (Complex Instruction Set Computing) ialah konsep reka bentuk pemproses yang dicirikan oleh set sifat berikut:

  • banyak arahan, berbeza panjangnya;
  • banyak mod pengalamatan;
  • pengekodan arahan yang kompleks.
RISC (Reduced Instruction Set Computing) - pemproses dengan set arahan yang dikurangkan. Arahan adalah format yang sama, pendek, dengan pengekodan mudah.
Generasi baharu pemproses memperkenalkan set arahan tambahan yang tidak diketahui oleh model generasi lama. Oleh sebab itu, program yang disusun untuk satu seni bina (atau satu generasi pemproses) tidak boleh dijalankan pada perkakasan lain. Semua ini memaksa kami untuk menyusun semula atur cara untuk memastikan ia berfungsi pada komputer lain. Walau bagaimanapun, anda perlu menyusun semula bukan sahaja kerana pemproses, tetapi juga kerana perbezaan dalam interaksi program dan sistem pengendalian. Ia adalah kerana mereka adalah mustahil untuk menjalankan program "Windows" di bawah Linux, dan program "Linux" di bawah Windows.

Bytecode

Bytecode dalam banyak cara serupa dengan kod mesin, cuma ia menggunakan set arahan bukan dari pemproses sebenar, tetapi dari yang maya. Lebih-lebih lagi, ia mungkin termasuk bahagian yang tertumpu pada penggunaan pengkompil JIT , yang mengoptimumkan pelaksanaan arahan untuk pemproses sebenar di mana program sedang berjalan.
Kompilasi JIT (Kompilasi tepat dalam masa, kompilasi on-the-fly) atau kompilasi dinamik (terjemahan dinamik) ialah teknologi untuk meningkatkan prestasi sistem perisian yang menggunakan bytecode dengan menyusun bytecode ke dalam kod mesin atau ke format lain secara langsung semasa program sedang berjalan. "Secara rasmi" di Java sehingga versi 9 hanya terdapat pengkompil JIT. Dalam Java 9, pengkompil lain telah muncul, dan ia menyusun lebih awal daripada masa (AoT). Ciri ini membolehkan kelas Java disusun menjadi kod asli sebelum dijalankan pada mesin maya. Ciri ini direka bentuk untuk meningkatkan masa permulaan untuk aplikasi kecil dan besar, dengan kesan terhad pada prestasi puncak.
Untuk pemproses CISC , beberapa arahan boleh digabungkan ke dalam struktur yang lebih kompleks yang disokong oleh pemproses, dan untuk RISC , sebaliknya, ia boleh dipecahkan kepada urutan arahan yang lebih mudah.

Juga OS maya

Walau bagaimanapun, kod bait mengandungi bukan sahaja arahan pemproses. Ia juga mengandungi logik untuk berinteraksi dengan sistem pengendalian maya, yang menjadikan tingkah laku aplikasi bebas daripada sistem pengendalian yang digunakan pada komputer. Ini boleh dilihat dengan jelas dalam JVM , yang berfungsi dengan panggilan sistem dan GUI selalunya bebas daripada OS tempat program dijalankan. Pada umumnya, JVM meniru pelancaran proses program, tidak seperti penyelesaian seperti Virtual Box , yang mencipta sistem/perkakasan maya sahaja.

Adakah JVM sahaja yang seperti ini?

Sudah tentu tidak. DotNet CLI yang sama juga merupakan mesin maya, yang paling kerap digunakan pada komputer yang menjalankan Windows dengan pemproses serasi x86. Walau bagaimanapun, terdapat pelaksanaan untuk sistem lain: aplikasi untuknya mesti dijalankan pada Windows RT yang dijalankan pada pemproses serasi ARM (RISC) , atau anda boleh menjalankannya pada Linux/OSX dalam persekitaran Mono , yang merupakan pihak ketiga (dan oleh itu tidak serasi sepenuhnya) pelaksanaan DotNet untuk platform ini. Jadi platform ini, seperti JVM , berjalan pada pemproses yang berbeza dan OS yang berbeza. Terdapat banyak lagi penyelesaian yang serupa (lama dan baharu): LLVM , Flash SWF dan lain-lain. Sesetengah bahasa pengaturcaraan mempunyai mesin maya mereka sendiri. Sebagai contoh, CPython menyusun sumber PY ke dalam fail PYC - kod bait tersusun yang disediakan untuk dijalankan dalam PVM . Atau terdapat contoh yang lebih lama - Lisp boleh disusun ke dalam fail FASL (Fast Load). Malah, ia mengandungi pokok AST yang dibina oleh penjana daripada kod sumber. Fail ini boleh dibaca dan dilaksanakan oleh jurubahasa Lisp pada pelbagai platform, atau digunakan untuk menjana kod mesin untuk seni bina perkakasan yang sedang digunakan.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION