1、JVM结构
3,类加载器:
作用:加载Class文件
1.虚拟机加载器:
>2、Bootstrap classLoader启动类(根)加载器:tr.jre主要负责加载核心的类库
>3、ExtClassLoade扩展类加载器:jre/lib/ext:扩展的jar
>4、AppClassLoader应用程序(系统类)加载器:主要负责加载应用程序的主函数类。
1-1双亲委派
过程:
1.类加载器收到类加载的请求!
2.将这个请求向上委托给父类加载器去完成,一直向上委托,直到启动类加载器(都很懒想看自己的上级能否处理,如果可以自己就不用处理了)
3.启动加载器检查是否能够加载当前这个类,能加载就结束,使用当前的加载器,否则,抛出异常,通知子加载器进行加载
4.重复步骤3
CLass Not Found I*╱
2、沙箱安全机制
一、基本组件
- 字节码校验器:确保Java语言规范
- 类加载器:。它防止恶意代码去干涉善意的代码;l双亲委派机制,I
。它守护了被信任的类库边界;
。它将代码归入保护域,确定了代码可以进行哪些操作。|
- 存取控制器:控制核心API对操作系统的存取权限
- 安全管理器:核心API操作系统之间的主要接口
3、native方法区:凡是带了native 关键字的,说明java的作用范围达不到了,回去调用底层C语言的库!
~会进入本地方法栈
~调用本地方法本地接口JNI
~JNI作用:扩展Java的使用,融合不同的编程语言为ava所用!最初:c、C++。
~它在内存区域中专门开辟了一块标记区域:Native Method Stack,登记native方法
~在最终执行的时候,加载本地方法库中的方法通过JNI
4、PC寄存器
程序计数器:Program Counter Register
每个线程都有一个程序计数器,是线程私有的,就是一个指针,指向方法区中的方法字节码(用来存储指向像一条指令的地址,也即将要执行的指令代码),在执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不计
5.方法区:
Method Area方法区
方法区是被所有线程共享,所有字段和方法字节码,以及一些特殊方法,如构造函数,接口代码也在此定义,简单说,所有定义的方法的信息都保存在该区域,此区域属于共享区间;
静态变量;常量、类信息(构造方法、接口定义)、运行时的常量池存在方法区中,但是实例变量存在堆内存中,和方法区无关=
static,final,Class,常量池
6.栈:8大基本数据类型+对象引用+实例的方法,一个栈一个线程
~什么是进程什么是线程:程序:完成特定任务的一系列指令集合
~进程:正在进行中的程序
1、用户角度:进程是程序的一次动态运行
2、操作系统:进程是对操作系统的分配资源的基本单位,也是最小单位
~线程:cpu调度的最小单位。
7、栈+堆+方法区:交互关系,存储的全部都是对象,每个对象包含了一个与之对应的 class 类的信息,会被所有线程共享。
对象在内存中实例化的过程
8、堆:一个JVM只有一个堆内存,堆内存大小是可以调节的(类,方法,常量)
- 新生区
- 养老区
- 永久代