手写JVM虚拟机?

简介: 手写JVM虚拟机?

相信很多搞Java开发都知道, Java程序的跨平台是依靠jvm的, 那jvm既然承担了Java程序的编译,解释,执行的工作,那是不是我们可以自己手写虚拟机呢,答案是可以的 。

虚拟机我们都知道用 C++ 写的hotspot, 其实很多厂商都有自己的一套虚拟机。想IBM用的是自己的OpenJ9。所以手写虚拟机还是可以实现的。


在idea 上很容易通过jclasslib  查看到字节码指令。

我们来看一组通用指令

iconst_0   将自然数0压入操作数栈

iconst_1   将自然数1压入操作数栈

iload_0     将索引为0的局部变量表的int型数据压入操作数栈

istore_1    将操作数栈栈顶的int型数据写入索引为1的局部变量表中。

// ......

在jvm 源代码中,定义了Java语言的全部指令集,若是平时接触过字节码的话,你对上面的应该就不陌生。   Java有了这套通用的指令集, 就有一统江湖的希望了。

这些指令有200多个, 这些指令都有自己实现逻辑, 我们把这些指令搞明白了,其实对jvm操作底层的指令就一目了然, 实现自己的jvm也就水到渠成了,看着是好简单,但这些都暗藏玄机,往往涉及到底层的东西,越是难懂。

我还真佩服那些 写出 jvm 这种鬼才。从0到1 是最难的。 现在我们是站在巨人的肩膀上, 把已有的jvm  hotspot 源码看明白, 再模仿写一个, 看似也没那么难。哈哈哈, 毕竟,模仿,还是比较在行的。


当然,要看懂这些指令集,还得懂 汇编。 常见的汇编指令,像什么 数据传送指令, 算术运算指令, 逻辑运算指令, 串指令, 程序转移指令。

1、数据传送指令

// 将自然数 1 传送到 eax 寄存器

mov1  1, %eax

// 将栈顶数据弹出至eax 寄存器

pop   %eax


2、算术运算指令

包括算术基本四则运算、 浮点运算、 数学运算(正弦,反弦)等。

例如:

//   将自然数3 与 eax 寄存器中的数累加,并将结果存储进eax 中

add 3,%eax

//    对 ebx 寄存器的数增1

inc  %ebx

3、逻辑运算指令

与、或、非、左移、右移等指令,都属于逻辑运算指令。例如

//  将 eax中的数 左移 1个二进制

sh1   %eax,  1

// 对 a1 寄存器中的数和操作数进行与操作

and  a1,  00111011B


4、串指令

连续空间分配,联系空间取值,传送等,都要使用串指令。很多高级

编程语言都支持字符串运算,如果硬件没有串指令,不敢想象计算机的世界会变成什么样。


5、程序转移指令

if....else  判断、 for 循环、 while 循环、函数调用等, 都需要依靠程序转移指令,否则程序无法跳转。没有这些指令,程序不能模块化,无法被分隔成一个一个方法,更无法通过循环来解决很多重要的问题。常见的程序转移指令包括jmp 跳转、loop 循环、ret 等。


这些指令在底层都和着计算机进行打交道。 所以,不容小觑啊!

目录
相关文章
|
10月前
|
监控 算法 Java
Java虚拟机(JVM)垃圾回收机制深度剖析与优化策略####
本文作为一篇技术性文章,深入探讨了Java虚拟机(JVM)中垃圾回收的工作原理,详细分析了标记-清除、复制算法、标记-压缩及分代收集等主流垃圾回收算法的特点和适用场景。通过实际案例,展示了不同GC(Garbage Collector)算法在应用中的表现差异,并针对大型应用提出了一系列优化策略,包括选择合适的GC算法、调整堆内存大小、并行与并发GC调优等,旨在帮助开发者更好地理解和优化Java应用的性能。 ####
234 27
|
11月前
|
监控 算法 Java
Java虚拟机(JVM)的垃圾回收机制深度解析####
本文深入探讨了Java虚拟机(JVM)的垃圾回收机制,旨在揭示其背后的工作原理与优化策略。我们将从垃圾回收的基本概念入手,逐步剖析标记-清除、复制算法、标记-整理等主流垃圾回收算法的原理与实现细节。通过对比不同算法的优缺点及适用场景,为开发者提供优化Java应用性能与内存管理的实践指南。 ####
|
11月前
|
机器学习/深度学习 监控 算法
Java虚拟机(JVM)的垃圾回收机制深度剖析####
本文深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法、性能调优策略及未来趋势。通过实例解析,为开发者提供优化Java应用性能的思路与方法。 ####
231 28
|
12月前
|
Java
jvm复习,深入理解java虚拟机一:运行时数据区域
这篇文章深入探讨了Java虚拟机的运行时数据区域,包括程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区、元空间和运行时常量池,并讨论了它们的作用、特点以及与垃圾回收的关系。
175 19
jvm复习,深入理解java虚拟机一:运行时数据区域
|
10月前
|
存储 监控 算法
深入探索Java虚拟机(JVM)的内存管理机制
本文旨在为读者提供对Java虚拟机(JVM)内存管理机制的深入理解。通过详细解析JVM的内存结构、垃圾回收算法以及性能优化策略,本文不仅揭示了Java程序高效运行背后的原理,还为开发者提供了优化应用程序性能的实用技巧。不同于常规摘要仅概述文章大意,本文摘要将简要介绍JVM内存管理的关键点,为读者提供一个清晰的学习路线图。
|
10月前
|
存储 监控 算法
Java虚拟机(JVM)垃圾回收机制深度解析与优化策略####
本文旨在深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法及参数调优方法。通过剖析垃圾回收的生命周期、内存区域划分以及GC日志分析,为开发者提供一套实用的JVM垃圾回收优化指南,助力提升Java应用的性能与稳定性。 ####
|
11月前
|
监控 Java 开发者
Java虚拟机(JVM)深度优化指南####
本文深入探讨了Java虚拟机(JVM)的工作原理及其性能优化策略,旨在帮助开发者通过理解JVM的内部机制来提升Java应用的运行效率。不同于传统的技术教程,本文采用案例分析与实战技巧相结合的方式,为读者揭示JVM调优的艺术。 ####
312 8
|
12月前
|
存储 算法 Java
Java虚拟机(JVM)的内存管理与性能优化
本文深入探讨了Java虚拟机(JVM)的内存管理机制,包括堆、栈、方法区等关键区域的功能与作用。通过分析垃圾回收算法和调优策略,旨在帮助开发者理解如何有效提升Java应用的性能。文章采用通俗易懂的语言,结合具体实例,使读者能够轻松掌握复杂的内存管理概念,并应用于实际开发中。
|
12月前
|
存储 算法 Java
深入理解Java虚拟机(JVM)及其优化策略
【10月更文挑战第10天】深入理解Java虚拟机(JVM)及其优化策略
127 1
|
11月前
|
监控 算法 Java
深入理解Java虚拟机(JVM)的垃圾回收机制
【10月更文挑战第21天】 本文将带你深入了解Java虚拟机(JVM)的垃圾回收机制,包括它的工作原理、常见的垃圾收集算法以及如何优化JVM垃圾回收性能。通过本文,你将对JVM垃圾回收有一个全新的认识,并学会如何在实际开发中进行有效的调优。
295 0