深入探索虚拟机:原理、优势与编程实践
1. 计算机对二进制串的解读
计算机在处理二进制串时,常常面临一个难题:如何区分看似相同的二进制串?例如,二进制串 0011 1110 0010 0000 0111 0010 0011 0111
可以有多种解读方式:
| 解读类型 | 结果 |
| — | — |
| 十六进制数 | 3E 20 72 37 |
| 有符号 32 位整数 | 1042313783 |
| 有符号 16 位整数 | 15904 29239 |
| 有符号 32 位浮点数 | 0.156686 |
| 8 位字符 | > space r 7 |
| 16 位字符 | - |
| JVM 机器指令 | istore 3 lstore 2 frem lstore |
简单来说,计算机自身难以区分这些二进制串。实际上,区分它们的关键在于程序指令的上下文。大多数计算机(包括 JVM)有多种不同类型的指令,虽然大致功能相同,但对操作的数据类型有明确要求。如果程序将整数加载到寄存器,却要求计算机进行浮点数加法,就会得到无意义且错误的结果。黑客也可能利用这种数据类型的错误使用,通过缓冲区溢出和覆盖可执行代码来入侵计算机。因此,确保数据正确存储和二进制串正确解读是程序员和编译器开发者的责任,而 JVM 能捕捉部分此类错误。
2. 虚拟机的概念
由于不同平台(CPU 类型和操作系统)的指令集存在差异,为一个特定平台编写的程序通常无法在其他平台上运行。这导致软件供应商需要为不同平台提供不同版本的程序,增加了开发成本和时间。不过,大多数编