Java字节码和机器码

理解字节码与机器码:从源代码到计算机指令
本文介绍了Java代码如何通过JVM编译成字节码,并进一步转化为机器码的过程。字节码以二进制形式存在,通常不可直接读取,而机器码则是计算机能直接执行的0和1序列。使用javap命令可以查看字节码文件的反汇编信息,了解其执行操作。

机器码和字节码怎么产生的

我们在ide中写的***java代码***(.java文件),会被jvm编译器编译成***字节码***文件(.lass),接下来字节码文件会被jvm执行引擎转化为计算机读得懂的机器码文件。

这些码都长什么样

先不谈.java文件,因为他就是我们用键盘敲出来的
那怎么看字节码文件呢,用记事本打开.class文件会出现乱码,这是在保护.java文件,不然的话用java写的网页或应用的源代码就没有秘密可言了。
在这里插入图片描述
那字节码张啥样呢,大概这样的,全是?进制的数字
在这里插入图片描述
我们也可以用命令行查看自己写的java语言的字节码的大概功能。输入javap -c XXX
反汇编命令,这些代码就是字节码文件在执行的操作,感兴趣可以百度这些代码的含义

在这里插入图片描述
那机器码什么样呢?
全部由0和1组成的文件,因为你的计算机只能读懂0和1!

### Java bytecode native machine code 的区别 Java **bytecode** 是一种中间形式的代码,由 Java 编译器将源代码编译而成,是与平台无关的二进制格式。它并不是直接在硬件上运行的机器码,而是被 JVM(Java 虚拟机)所解释执行或进一步优化为 native code 运行[^2]。 相比之下,**native machine code** 是针对特定处理器架构操作系统直接执行的指令集,通常是由高级语言(如 C/C++)通过编译生成的目标代码,无需虚拟机介入即可在操作系统上直接运行[^3]。 #### 执行方式的不同 Java bytecode 在运行时由 JVM 加载并解释执行,同时可以借助 JIT(Just-In-Time)编译器动态地将字节码转换为 native machine code 以提高性能。这种方式使得 Java 程序具有良好的跨平台能力,因为字节码并不依赖于底层硬件操作系统[^2]。 而 native machine code 是静态编译的结果,直接面向目标平台,不具备跨平台特性。例如,一个为 x86 架构 Windows 编写的可执行文件不能直接在 ARM 架构的 Linux 上运行,除非重新编译为目标平台的机器码[^5]。 #### 可移植性差异 Java bytecode 具有高度可移植性,其核心理念是“一次编写,到处运行”(Write Once, Run Anywhere),只要目标系统安装了兼容的 JVM,就可以运行相同的字节码[^2]。 native machine code 则不具备这种可移植性,它必须根据目标平台重新编译。虽然现代技术如 .NET Core Mono 提供了一定程度上的跨平台支持,但它们仍然需要在不同平台上使用相应的运行时环境来生成对应的机器码[^3]。 #### 安全性管理机制 Java bytecode 是在受控环境中运行的,JVM 提供了类加载、安全管理、垃圾回收等机制,确保程序的安全性稳定性。这些机制对开发者透明,但在 native code 中通常需要手动实现或依赖操作系统提供保障[^1]。 native machine code 缺乏类似的内置安全机制,程序可以直接访问系统资源,因此更容易受到恶意攻击或引发系统崩溃。 #### 示例对比 以下是一个简单的 Java 方法及其生成的 bytecode: ```java public class Example { public static int add(int a, int b) { return a + b; } } ``` 使用 `javap -c` 查看字节码: ```text public static int add(int, int); Code: 0: iload_0 1: iload_1 2: iadd 3: ireturn ``` 相对应的 native machine code(以 x86 汇编为例)可能是这样的: ```asm add: mov eax, [esp+4] add eax, [esp+8] ret ``` 可以看到,bytecode 更接近高级语言结构,而 native code 更贴近硬件操作。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值