先来说下虚拟机的类型,常见的虚拟机分三种:
- 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教程:
最后Java基础入门的小伙伴,技术整合提升自己不要错过
需要课件、源码、安装包等资料,可以评论告诉我哦~
本文介绍了Java虚拟机的三种类型:HotSpot、JRockit和IBM的jvma,重点关注HotSpot虚拟机如何运行Java字节码。从虚拟机角度,包括加载class文件到方法区,执行方法区内的代码,以及栈帧的作用和内存组成部分。从硬件角度,阐述了Java字节码如何通过解释执行和即时编译转化为机器码。

944

被折叠的 条评论
为什么被折叠?



