JVM学习笔记1(组成和类加载器)

JVM

JVM指令集手册下载地址:
链接:https://pan.baidu.com/s/1YvvOvI5c2PmTWAPmV-6qjw 
提取码:57sg 
复制这段内容后打开百度网盘手机App,操作更方便哦

JVM组成结构谈谈


JVM是运行在操作系统之上的,他与硬件没有直接的交互。


JVM体系结构概览


Class Loader类加载器

负责加载class文件,class文件在文件开头有特定的文件标示,并且ClassLoader只负责class文件的加载,值与他是否可以允许,则由Execution Engine决定,加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)

Bootstrap ClassLoader:

启动类/引导类加载器,加载java、javax、sun等开头的类,C/C++编写

Extension ClassLoader:

扩展类加载器,从java.exe.dirs或者JDK安装目录的jre/lib/ext中类,如果用户自己创建的jar放在ext目录下也会被自动加载

AppClassLoader:

系统类加载器,加载classpath或系统属性java.class.path指定下的类库,是程序中默认的类加载器


类的加载过程:
1、加载class文件
2、验证,准备,解析


3、初始化clinit,先执行父类的clinit,保证一个类的clinit在多线程情况下被同步加锁




双亲委派机制:

概述:

Java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该类时才会将它的class文件加载到内存生成class对象。而且加载某个类的class文件时,Java虚拟机采用的是双亲委派模式,即把请求交由父类处理它是一种任务委派模式。

工作原理:

1、如果一个类加载收到类加载请求,他并不会自己先去加载,而是把这个请求委托给父类的加载器去执行。
2、如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器。
3、如果父类加载器可以完成加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子类加载器才会尝试自己去加载。

优势:

➢避免类的重复加载
➢保护程序安全,防止核心API被随意篡改
  自定义类: java.lang.String
  自定义类: java.lang.ShkStart


你可能感兴趣的:(JVM学习笔记1(组成和类加载器))