Java虚拟机如何运行Java字节码

117 阅读2分钟

先来说下虚拟机的类型,常见的虚拟机分三种:

1.HotSpot

2. JRockit

3.IBM的jvma

标准JDK中的HotSpot是如何运行Java字节码的呢?

需要从两个角度考虑:

  • 虚拟机角度

  • 底层硬件角度

1.虚拟机角度

1.1从虚拟机角度是如何运行Java字节码的?

①首先会将Java代码编译成的class文件加载到JVM

②加载后的Java类会存放到方法区中。

③实际运行时,JVM会执行方法区内的代码。

④运行时,每当调用进入一个Java方法,JVM会在当前线程的Java方法栈中生成一个栈帧。

⑤退出执行的Java方法时,无论是不是正常返回,JVM都会弹出并舍弃掉当前线程的当前栈帧。

1.2栈帧是什么?

①用于存放局部变量、字节码的操作数

②栈帧的大小是提前计算好的。

③JVM不要求栈帧在内存空间内连续分布。

1.3JVM中内存组成部分有哪些?线程共享的是哪些部分?线程私有的是哪些部分?

线程共享:

①方法区:存放加载后的Java类

②堆:创建的对象实例

线程私有:

①Java方法栈: 面向Java方法

②本地方法栈: 面向C++写的native方法

③PC寄存器: 存放各个线程执行位置。

2.硬件角度

2.1从硬件角度角度是如何运行Java字节码的?

①Java字节码无法直接执行

②JVM需要将字节码翻译成机器码

2.2JVM(如HotSpot)如何将字节码翻译成机器码?

两种方法:

①解释执行-逐条将字节码翻译成机器码执行

②即时编译(Just-In-Time compilation, JIT)-将一个方法中的字节码都编译成机器码后再执行。

更多JAVA教程:

尚学堂给同学们带来全新的Java300集课程啦!java零基础小白自学Java必备优质教程_手把手图解学习Java,让学习成为一种享受_哔哩哔哩_bilibili

最后Java基础入门的小伙伴,技术整合提升自己不要错过

需要课件、源码、安装包等资料,可以评论告诉我哦~