JVM整体结构
2021-03-21 23:06:01 3 举报
JVM整体结构
作者其他创作
大纲/内容
car1
Car.class
JVM
元空间
幸存区To
类加载器子系统(ClassLoader)
栈帧
线程B
启动类加载器BootstrapClassLoader
初始化
程序计数器
执行引擎
CarClass
.class文件
本地方法接口(Java Native Interface,JNI)
本地方法栈
加载
实例化new
Car的实例
本地方法库
栈
准备
幸存区From
方法区
操作数栈
局部变量表
老年代
堆内存
双亲委派机制1.类加载器收到类加载的请求2.将这个请求向上委托给父类加载器去完成,一直向上委托,直到启动类加载器3.启动类加载器检查是否能够加载当前这个类,能加载就结束,使用当前的加载器,否则抛出异常,通知子加载器进行加载4.重复步骤3
链接
car2
线程A
解析
动态链接
线程A程序计数器
目标代码生成器
加载,初始化
验证
解释器
car3
垃圾回收
1.JVM整体结构
新生代
幸存区的To、From是不固定的,谁空谁是To元空间,jdk8之前叫做永久区,存在于内存中,用来存放JDK自身携带的Class对象、接口元数据,存储的是Java运行时的一些环境或类信息,不存在GC(逻辑上属于堆,物理上不属于堆)方法区是一种定义概念,元空间是其实现方式GC的垃圾回收主要在伊甸园区和老年区
Heap堆区
附加信息
getClassLoader()
方法返回地址
程序计数器,指向方法区中的方法字节码(用来存储指向一条指令的地址,也即将要执行的指令代码)。线程私有,无GC本地方法栈,调用本地方法接口栈,存储当前线程运行方法所需的数据、指令、返回地址,主管程序运行。线程私有,无GC方法区,存储类信息(Class模板)、常量池、静态变量(static)、变量(final)。线程共享,非堆区,无GC堆,存储类实例,一个JVM只有一个堆内存。线程共享,要GC
代码优化器
扩展类加载器ExtClassLoader
Native关键字凡是带native关键字的,说明Java的作用范围达不到了,回去调用底层C语言的库,会进入本地方法栈,调用本地方法接口
中间代码生成器
getClass()
ClassLoader
伊甸园Eden
系统类加载器AppClassLoader
运行时数据区(RuntimeDataArea)
即时编译器
分析器
线程B程序计数器
收藏
0 条评论
回复 删除
下一页