JVM运行原理图
2018-05-22 10:44:28 0 举报
JVM运行原理图
作者其他创作
大纲/内容
类加载
1.遇到new、getstatic、putstatic或invokestatic这4条字节码指令时,如果类没有进行过初始化,则需先触发其初始化。
元数据,继承,常量信息
运行数据区(内存区域)
CustomClassLoader
程序计数器(线程指示器)
解析:解析的动作主要针对类或接口、字段、类方法、接口方法四类符号引用进行替换为 直接引用的过程
2.使用java.lang.reflect包的方法对类进行反射调用的时候
方法区(系统级别的类信息)
词法,语法,语义结构抽象
编译
1.方法区,堆是系统级线程共享内存区。2.本地方法栈 指的是java Native方法调用JNI到了底层的C/C++。(c/c++可以触发汇编语言,然后驱动硬件)3.虚拟机栈栈 和程序计数器,本地线程栈 都是线程 私有的。虚拟机栈的话其实就是一个方法 一个栈帧,对应执行 入栈 出栈(如:debug 调试过程的栈帧执行过程)3.堆是实例对象 存放的地方 4本地方法栈和虚拟机栈通常称为 栈 5.一般认为 内存分为:堆,栈,方法区,很显然,方法区属于持久代(堆的一个的内存逻辑区),因为存放的是类的基本信息。6常量池存在于方法区
验证:验证阶段主要包括四个检验过程:文件格式验证、元数据验证、字节码验证和符号引用验证
准备:为类静态变量分配内存并进行初始化,此时放在方法区内存中,实例变量是在对象实例化之后 ,是分配在堆上的
执行过程
词法,语法,语义分析检查
结构信息,版本大小信息
堆
BootstrapClassLoader
执行引擎(执行类的方法),GC
c++实现,非ClassLoader子类,加载java_home下的 rt.jar
ExtensionClassLoader
Java编译器干的活
JNI
虚拟机栈(线程栈帧)
本地方法库
本地方法接口
JVM 类加载机制的1.加载步骤
3.当初始化一个类的时候,如果发现其父类还没有进行过初始化、则需要先出发其父类的初始化
AppClassLoader
2.链接步骤
JVM的类加载,在加载过程中双亲委托机制即向上委托父类记载,父类不能加载自己记载并缓存class信息(部署重启原因),避免的 是一个类进行重复加载。加载之后进行链接
方法信息
PC指令寄存器(cpu的一部分,cpu还有程序计数器)
本地方法栈(Native方法服务)
3.初始化过程
4.jvm启动时,用户指定一个执行的主类(包含main方法的那个类),虚拟机会先初始化这个类
classpath中指定的jar包及目录中class
Java源文件
class字节码
.class字节码文件
0 条评论
回复 删除
下一页