先来说下虚拟机的类型,常见的虚拟机分三种:
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基础入门的小伙伴,技术整合提升自己不要错过
需要课件、源码、安装包等资料,可以评论告诉我哦~