Java虚拟机
类加载器 + 执行引擎
类加载器子系统作用:
负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。
ClassLoader 只负责class文件的加载,至于它是否可以运行,则由ExecutionEngine决定。
常量池运行的时候加载到内存里就叫运行时常量池。
加载.class文件的方式
链接
验证->准备->解析
Java虚拟机中的加载器关系
自定义类加载器
用途:
- 隔离加载类
- 修改类加载的方式
- 扩展加载源
- 防止源码泄露
双亲委派机制
Java导包的原则是按需加载!
沙箱安全机制
出发点是防止被注入恶意代码(保护),保证原有的类,方法不会擅改
类的主动使用和被动使用
运行时数据区内部结构
运行时数据区包括:
方法区、堆、程序计数器、本地方法栈、虚拟机栈
堆跟方法区在不同线程中是公用的,而其他的是每个线程私有的。
运行时数据区:
95%的垃圾处理集中在堆区,剩下的在方法区,一个 Class Runtime 对应一个虚拟机
线程
一个普通的方法,可能有十几个线程,甚至更多
运行时数据区
- 程序计数器(PC)
使用PC寄存器存储器字节码指令地址有什么作用呢?
CPU需要不停的切换线程,这时候切换回来以后,就得知道接着从哪里开始继续执行。
使用PC寄存器存储器字节码指令地址有什么作用呢?
CPU需要不停的切换线程,这时候切换回来以后,就得知道接着从哪里开始继续执行。