一、java虚拟机体系结构
1.什么是jvm?
jdk>jre>jvm
jvm就相当于一个软件安装在我们的操作系统上,如图所示
2.jvm内部有哪些组成?
3.类的加载
将*.class的的二进制文件通过IO流读入到内存中,并将其放在运行时数据区的方法区内,然后在堆区中创建一个Class对象,这个Class对象就是类加载的最终结果。最后由执行引擎执行指令码,同时修改程序计数器的值。
4.类加载的过程以及类加载的种类
过程如下图所示:
其中:
启动类加载器所处目录
拓展类加载器所处目录:
二、java虚拟机运行时内存区域
1.线程私有区域
包含:程序计数器,本地方法栈,java虚拟机栈。
- 程序计数器:记录字节码执行行号。也是所有内存区域当中唯一不会内存溢出的地方。
- java虚拟机栈:当java中的方法被执行时会形成栈帧放入到栈内存当中,这个行为称为压栈。当方法执行完毕从栈中出来的行为称为弹栈。而栈帧又分为--局部变量表、操作数栈、方法出口、动态连接。
- 本地方法栈:由native方法修饰的本地方法栈,实际上是调用C或者C++的函数。
2.线程共有区域
包含:堆内存,方法区。
- 堆内存:分配所有对象实例,垃圾回收主要的区域。
- 方法区:又被称为元数据区,包含虚拟机加载的类信息,常量,静态变量。
最终运行时数据区的模型如下图所示。