jvm 运行时数据区1、类加载器(ClassLoader)
加载类文件到内存。Class loader只管加载
2、运行时数据区(Runtime Data Area)
3、本地库接口(Native Interface)
本地接口的作用是融合不同的语言为java所用
4、执行引擎(Execution Engine)
也叫解释器,负责解释命令,交由操作系统执行
堆和栈的区别?1、堆 Heap
堆是java对象的存储区域,任何用new字段分配的java对象实例和数组,jdk1.7以后,运行时常量池从方法区移到了堆上。
2、方法区 Method Area
用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。
3、虚拟机栈 VM Stack
4、本地方法栈 Native Method Stack
5、程序计数器 Program Counter Register
指示Java虚拟机下一条需要执行的字节码指令
队列和栈是什么?有什么区别?栈,存储的是局部变量;
堆,存储的是实体;
栈更新速度比堆快,栈是局部变量,用完即回收
堆需要等到垃圾回收才被回收
类加载器分为队列和栈都是被用来预存储数据的。
队列 一般先进先出,但也有例外的情况,Deque 接口允许从两端检索元素。
栈 后进先出
双亲委派模型1、启动类加载器(Bootstrap ClassLoader)
是虚拟机自身的一部分,用来加载Java_HOME/lib/目录中的,
或者被 -Xbootclasspath 参数所指定的路径中并且被虚拟机识别的类库
2、扩展类加载器(Extension ClassLoader)
负责加载libext目录或Java. ext. dirs系统变量指定的路径中的所有类库
3、应用程序类加载器(Application ClassLoader)
负责加载用户类路径(classpath)上的指定类库
类加载的执行过程如果一个类加载器收到了类加载的请求,它首先不会自己去加载这个类,而是把这个请求委派给父类加载器去完成,每一层的类加载器都是如此,这样所有的加载请求都会被传送到顶层的启动类加载器中,只有当父加载无法完成加载请求(它的搜索范围中没找到所需的类)时,子加载器才会尝试去加载类。
1、Loading 加载
根据查找路径找到相应的 class 文件然后导入;2、linking 连接
Verification 检查:验证文件是否符合JVM规定
Preparation 准备:静态成员变量赋默认值
Resolution 解析:将类、方法、属性等符号引用解析为直接引用
常量池中的各种符号引用解析为指针、偏移量等内存地址的直接引用3、Initializing 初始化
调用类初始化代码 ,给静态成员变量赋初始值



