Every computer is associated with a set of instructions that is
recognized and executed by that computer itself. The instructions are
stored as binary bit patters, as strings of 1s and 0s. So any particular
computer can only execute instructions in the machine code langue of
its microprocessor. The program can be stored on a disk and then loaded
into the computer’s internal memory, and then the instructions are
fetched one by one by the CPU and executed. Previously, programmers used
to write programs in the native machine code of the processor, but the
whole process was time-consuming and expensive, and the machine code is
of no use to a human reader.
To overcome these problems, assembler language was invented. In this,
data can be represented using decimal numbers instead of binary. But a
program is required to convert an assembler language program into
machine code. This program is called an assembler. Assemblers made
programs human readable and programming less error-prone, but could not
overcome the portability problem. The shortcomings in the assembler
programs led to the development of high-level programming languages
which made programming more productive, but again, they could not be
executed on a computer. A compiler is then used for this purpose. And to
make the same compiled program run on any computer, the program is
compiled to something called bytecode.
What is Bytecode?
Bytecode is a highly optimized set of instructions designed to be
executed by a program, usually referred to as a virtual machine. It is
an intermediate code compiled into a low-level code from the source code
for efficient execution by a software interpreter. It is essential to
recognize that Bytecode is not machine code used by the hardware
processor. The virtual machine converts bytecode into specific machine
instructions that the computer’s processor will understand. A
just-in-time compiler can be used as a means to speed up execution of
bytecode. In Java, a bytecode is the instruction set for the Java
Virtual Machine (JVM). The JVM is a program that provides the runtime
environment necessary for the execution of Java programs. The programs
cannot run unless there is a JVM available for the appropriate hardware
and OS platform you will execute on. The JVM is an interpreter for
bytecode. Java bytecode is not platform-specific, so it can be fed to
just any platform.
What is Machine Code?
Machine code is a computer program that is made up of the native
instructions associated with that particular computer. It is the
elemental language of computers written in machine language instructions
consisting of binary or hexadecimal instructions that is directly
understandable by a computer’s central processing unit (CPU). Every
computer processor is associated with a set of machine code instructions
which it can understand and therefore execute. All the programs must be
converted into the machine language before they can be run. A compiler
converts the program written by a computer programmer into machine code
containing 0’s and 1’s, and the OS then runs the application in machine
code. It simply is a list of CPU instructions stored in memory at the
lowest level. Compilers convert high-level languages such as C, C++ and
Java to an intermediate language (such as bytecode) which is then
interpreted to machine language.
Difference between Bytecode and Machine Code
Definition
– Bytecode is an intermediate code compiled into a low-level code
from the source code and designed to run on a virtual machine instead of
a central processing unit (CPU). It is a highly optimized set of
instructions which can be recognized as a machine code for a made-up
processor or a machine code for the CPU of the internal computer.
Machine code, on the other hand, is a computer program made up of the
native instructions consisting of a stream of 0’s and 1’s that can be
directly executed by a computer’s CPU.
Function
– Bytecode is similar to machine
code which is interpreted by a runtime system so that the code can be
executed on a system. The virtual machine converts bytecode into
specific machine instructions that the computer’s processor will
understand. The function of a bytecode is to be a format that can be
executed efficiently by the virtual machine’s interpreter. Machine code
is the elemental language of computers written in binary or hexadecimal
that is understandable by a computer’s CPU. It is the language which all
programs must be converted into before they can be run.
Platform
– Bytecode is platform-independent because it can
be executed on any platform using the virtual machine. The format of
bytecode is always the same, regardless of what type of machine it was
created on. A program can be compiled into bytecode and sent to any
machine, if that machine has the run-time installed. Machine code, on
the other hand, is not platform independent meaning it cannot be run on
just any platform with the same OS because it is made up of the native
instructions associated with that particular computer.
Bytecode vs. Machine Code: Comparison Chart
Summary
Bytecode is not a machine code for any particular computer and may be
portable among computer architectures. It is similar to machine code
which is interpreted by a runtime system so that the code can be
executed on a system. The virtual machine converts bytecode into
specific machine instructions that the computer’s processor will
understand. Machine code is a computer program that can be executed
directly by the computer’s hardware with no software needed. Unlike
bytecode which is platform-independent, machine code cannot be run on
just any platform with the same operating system.
Nguồn: https://www.differencebetween.net/technology/difference-between-bytecode-and-machine-code/

nguồn ảnh: https://studyglance.in/c/display.php?tno=3&topic=Creating-and-Running