HotSpot VM 是目前市面上高性能虚拟机的代表作之一,它采用解析器与即时编译器并存的架构 JVM架构图如下👇 Java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的 一个运行中的Java虚拟机有着一个清晰的任务:执行Java进程 退出有如下几种情况: 1)通过一个类的全限定名获取定义此类的二进制字节流 1)验证(Verify) 2)准备(Prepare) 3)解析(Resolve) 整体架构图👇 为什么要自定义类加载器? ClassLoader类是Java中的一个抽象类,其后所有的类加载器都继承自该类(引导类加载器使用C/C++语言编写,并不在Java体系中,所以不会继承ClassLoader) 方式一:获取当前类的ClassLoader 方式二:获取当前线程上下文的ClassLoader 方式三:获取系统的ClassLoader 方式四:获取调用者的ClassLoader 架构图👇 优势: 示例👇 自定义String类,但是在加载自定义String类的时候会率先使用引导类加载器加载,而引导类加载器在加载的过程中会先加载JDK自带的文件(rt.jar包中的javalangString.class),报错信息说没有main方法,就是因为加载的是rt.jar包中的String类。这样可以保证对java核心源代码的保护,这就是沙箱安全机制 Java程序对类的使用方式分为:主动使用和被动使用 除了以上7种情况,其他使用Java类的方式都被看作是对类的被动使用,都不会导致类的初始化(该初始化是类的加载第三步)
JVM(图片来源于网络,侵删)
【1】JVM概述
【2】JVM生命周期
虚拟机的启动
虚拟机的执行
程序开始执行时他才运行,程序结束时他就停止
执行一个所谓的Java进程的时候,真真正正在执行的是一个叫做Java虚拟机的进程虚拟机的退出
1)程序正常执行结束
2)程序在执行过程中遇到了异常或错误而异常终止
3)由于操作系统出现错误而导致Java虚拟机进程终止
4)某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit或halt操作
5)除此之华,JNI(Java Native Interface)规范描述了用Invocation API来加载或卸载Java虚拟机时,Java虚拟机的退出情况【3】内存结构
【4】类加载
整体架构
1)类加载器子系统负责从文件系统或网络中加载class文件,class文件的文件开头有特定的文件标识
2)ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定
3)加载的类信息存放于内存空间中的方法区。除了类信息外,方法区中还会存放运行时常量池信息、字符串字面量和数字常量(这部分常量信息是class文件中常量池部分的内存映射)
类的加载过程概述 1
1)class文件存放在磁盘中,可以理解为一个模板,加载class文件的过程就可以理解为根据磁盘中的模板在JVM中创建一个相同的实例
2)class文件加载到JVM中,被称为DNA元数据模板,存放在方法区
3)在 class文件 -> JVM -> 元数据模板 的这个过程中,就是通过类加载器(Class Loader)来完成的
类的加载过程概述 2
类的加载过程一 (加载)
2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
3)在内存中生成一个代表这个类的 java.lang.Class对象,作为方法区这个类的各种数据的访问入口 类的加载过程二 (链接)
类的加载过程三 (初始化)
<clinit>()
的过程<clinit>()
不同于类的构造器<clinit>()
执行前,父类的<clinit>()
已经执行完毕<clinit>()
方法在多线程下被同步加锁 类的加载器
引导类加载器:Bootstrap ClassLoader
扩展类加载器:Bootstrap ClassLoader
应用类加载器:Bootstrap ClassLoader
自定义类加载器:Bootstrap ClassLoader
关于ClassLoader
方法名称
描述
getParent()
返回该类加载器的超类加载器
loadClass(String name)
加载名为 name 的类,返回结果为 java.lang.Class 类的实例
findClass(String name)
查找名为 name 的类,返回结果为 java.lang.Class 类的实例
findLoadedClass(String name)
查找名为 name 的已经被加载过的类,返回结果为java.lang.Class类的示例
defineClass(String name,byte[] b,int off,int len)
把字节数组 b 中的内容转换为一个Java类,返回结果为 java.lang.Class类的实例
resolveClass(Class<?> c)
链接指定的一个Java类
获取ClassLoader的方式
双亲委派机制
工作原理:
沙箱安全机制
类的主动使用和被动使用
主动使用,又分为7种情况:
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算