JVM的功能
- 把字节码文件解析成机器码让计算机执行
- 自动为对象,方法分配内存
- 自动的垃圾回收机制.
- 即时编译:把热点字节码缓存成机器码,跳过class文件解析的过程,提高执行效率
JVM的组成:
- classLoad类加载器,将字节码文件加载到内存中.
- 运行时数据区
线程共享区:堆和方法区 线程私有区:java虚拟机栈,本地方法栈,程序计数器. 2.1)程序计数器记录线程执行的位置. 2.2)堆内存,存储对象实例和数组 2.3)方法区保存类的信息,常量,静态变量.(比如反射的方式获取类的信息就是从方法区取的),jdk1.8之后被元空间取代,区别元空间用的是本地的内存,方法区用的jvm的堆内存. 2.4)java虚拟机栈:负责方法的调用,当一个方法被调用时候就创建一个新的栈帧压入栈顶.执行完毕就弹栈. 2.5)本地方法栈:负责执行本地方法的.(比如C编写的一些系统级别的函数获取操作系统信息等)
- 执行引擎,负责把字节码指令翻译成机器指令
- 本地接口:提供一些本地方法