JVM内部体系结构分为三部分
1.类加载器(ClassLoader)子系统。
2.执行引擎。
3.运行时数据区。
首先我们要知道当我们写完代码之后所保存的.java文件是如何经过虚拟机的处理再生成最后的01001010这样的字节码文件的,如下图:
- .java文件经过编译器编译得到.class文件(编译阶段不涉及JVM)
- 编译成功后运行程序,此时实际上就是把.class文件送入JVM
- 经过JVM的处理最后生成计算机能”看得懂“的文件
那么我们现在的主题就是研究研究JVM的内存区域(决定了程序中的类、属性、方法等在哪保存)了。
类装载器
每一个Java虚拟机都有:
- 类加载器子系统(classloader subsystem):加载程序中的类型(类和接口),并赋予唯一的名字。
- 执行引擎(execution engine):执行被加载类中的指令。
用户自定义类加载器必须是classloader类的子类。
执行引擎
作用:执行字节码 or 执行本地方法
运行时数据区
线程共享:(方法区、堆)
线程私有:(虚拟机栈、本地方法栈、pc寄存器(程序计数器))
说明:本地方法是由其它语言编写的,编译成和处理器相关的机器代码。本地方法保存在动态链接库中,即.dll(windows系统)文件中,格式是各个平台专有的。
JVM的内存管理实际上就是管理运行时数据区。